<?php
/**
 * Generate a snippet for a hook.
 *
 * @package WPCode
 */

/**
 * WPCode_Generator_Hooks class.
 */
class WPCode_Generator_Hooks extends WPCode_Generator_Type {

	/**
	 * The generator slug.
	 *
	 * @var string
	 */
	public $name = 'hooks';

	/**
	 * The categories for this generator.
	 *
	 * @var string[]
	 */
	public $categories = array(
		'core',
	);

	/**
	 * Set the translatable strings.
	 *
	 * @return void
	 */
	protected function set_strings() {
		$this->title       = __( 'Hooks', 'insert-headers-and-footers' );
		$this->description = __( 'Generate a snippet for an action or a filter using any available hook.', 'insert-headers-and-footers' );
	}

	/**
	 * Return a list of hooks for suggestions in the hook autocomplete.
	 *
	 * @return array
	 */
	protected function get_all_hooks_options() {
		return array(
			'link_category',
			'link_title',
			'signup_another_blog_init',
			'signup_create_blog_meta',
			'add_signup_meta',
			'signup_user_init',
			'signup_blog_init',
			'signup_get_available_languages',
			'wpmu_active_signup',
			'wp_http_cookie_value',
			'customize_panel_active',
			'register_post_type_args',
			'http_origin',
			'allowed_http_origins',
			'allowed_http_origin',
			'wp_mail',
			'wp_mail_from',
			'wp_mail_from_name',
			'wp_mail_content_type',
			'wp_mail_charset',
			'authenticate',
			'auth_cookie',
			'auth_cookie_expiration',
			'secure_auth_cookie',
			'secure_logged_in_cookie',
			'secure_auth_redirect',
			'auth_redirect_scheme',
			'wp_redirect',
			'wp_redirect_status',
			'wp_safe_redirect_fallback',
			'allowed_redirect_hosts',
			'comment_notification_recipients',
			'comment_notification_notify_author',
			'comment_notification_text',
			'comment_notification_subject',
			'comment_notification_headers',
			'notify_moderator',
			'comment_moderation_recipients',
			'comment_moderation_text',
			'comment_moderation_subject',
			'comment_moderation_headers',
			'wp_password_change_notification_email',
			'wp_new_user_notification_email_admin',
			'wp_new_user_notification_email',
			'nonce_life',
			'nonce_user_logged_out',
			'nonce_user_logged_out',
			'salt',
			'salt',
			'check_password',
			'check_password',
			'random_password',
			'pre_get_avatar',
			'style_loader_tag',
			'print_styles_array',
			'style_loader_src',
			'graceful_fail',
			'wp_is_mobile',
			'wp_kses_allowed_html',
			'pre_kses',
			'wp_editor_settings',
			'the_editor_content',
			'quicktags_settings',
			'teeny_mce_plugins',
			'mce_external_plugins',
			'tiny_mce_plugins',
			'mce_external_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',
			'wp_mce_translation',
			'wp_link_query_args',
			'wp_link_query',
			'use_curl_transport',
			'old_slug_redirect_post_id',
			'old_slug_redirect_url',
			'pre_do_shortcode_tag',
			'do_shortcode_tag',
			'strip_shortcodes_tagnames',
			'wp_http_ixr_client_headers',
			'session_token_manager',
			'attach_session_information',
			'session_token_manager',
			'get_attached_file',
			'update_attached_file',
			'_wp_relative_upload_path',
			'get_post_status',
			'wp_count_attachments',
			'post_mime_types',
			'pre_delete_post',
			'pre_trash_post',
			'pre_untrash_post',
			'wp_insert_post_parent',
			'wp_insert_attachment_data',
			'wp_insert_post_data',
			'wp_unique_post_slug',
			'add_ping',
			'get_enclosed',
			'get_pung',
			'get_to_ping',
			'get_page_uri',
			'wp_get_attachment_metadata',
			'wp_get_attachment_url',
			'wp_get_attachment_caption',
			'wp_get_attachment_thumb_file',
			'wp_get_attachment_thumb_url',
			'icon_dir',
			'icon_dir_uri',
			'icon_dirs',
			'wp_mime_type_icon',
			'get_lastpostdate',
			'pre_get_lastpostmodified',
			'get_lastpostmodified',
			'post_rewrite_rules',
			'date_rewrite_rules',
			'root_rewrite_rules',
			'comments_rewrite_rules',
			'search_rewrite_rules',
			'author_rewrite_rules',
			'page_rewrite_rules',
			'tag_rewrite_rules',
			'rewrite_rules_array',
			'mod_rewrite_rules',
			'rewrite_rules',
			'iis7_url_rewrite_rules',
			'customize_section_active',
			'oembed_providers',
			'pre_oembed_result',
			'oembed_result',
			'oembed_remote_get_args',
			'oembed_fetch_url',
			'oembed_dataparse',
			'rest_url_prefix',
			'rest_url',
			'wp_rest_server_class',
			'rest_avatar_sizes',
			'protected_title_format',
			'private_title_format',
			'the_title',
			'the_guid',
			'get_the_guid',
			'the_content',
			'the_content_more_link',
			'the_excerpt',
			'get_the_excerpt',
			'post_class',
			'body_class',
			'post_password_required',
			'wp_link_pages_args',
			'wp_link_pages_link',
			'wp_link_pages',
			'the_meta_key',
			'wp_dropdown_pages',
			'wp_list_pages_excludes',
			'wp_list_pages',
			'wp_page_menu_args',
			'wp_page_menu',
			'wp_get_attachment_link',
			'prepend_attachment',
			'the_password_form',
			'wp_post_revision_title_expanded',
			'customize_loaded_components',
			'customize_changeset_branching',
			'customize_save_response',
			'customize_changeset_save_data',
			'customize_dynamic_setting_args',
			'customize_dynamic_setting_class',
			'customize_allowed_urls',
			'customize_refresh_nonces',
			'customize_previewable_devices',
			'customize_load_themes',
			'user_has_cap',
			'get_date_sql',
			'core_version_check_locale',
			'core_version_check_query_args',
			'plugins_update_check_locales',
			'themes_update_check_locales',
			'wp_get_update_data',
			'link_category',
			'wp_list_bookmarks',
			'script_loader_src',
			'script_loader_tag',
			'print_scripts_array',
			'wp_admin_bar_class',
			'show_admin_bar',
			'can_add_user_to_blog',
			'is_email_address_unsafe',
			'wpmu_validate_user_signup',
			'minimum_site_name_length',
			'newblogname',
			'wpmu_validate_blog_signup',
			'signup_site_meta',
			'signup_user_meta',
			'newblog_notify_siteadmin',
			'newuser_notify_siteadmin',
			'domain_exists',
			'update_welcome_email',
			'update_welcome_subject',
			'update_welcome_user_email',
			'update_welcome_user_subject',
			'pre_get_space_used',
			'get_space_allowed',
			'wp_is_large_network',
			'subdirectory_reserved_names',
			'new_network_admin_email_content',
			'send_network_admin_email_change_email',
			'network_admin_email_change_email',
			'hook',
			'example_filter',
			'wpdocs_filter',
			'oembed_default_width',
			'oembed_request_post_id',
			'rest_oembed_ttl',
			'wp_feed_cache_transient_lifetime',
			'get_bloginfo_rss',
			'bloginfo_rss',
			'default_feed',
			'get_wp_title_rss',
			'wp_title_rss',
			'the_title_rss',
			'the_content_feed',
			'the_excerpt_rss',
			'the_permalink_rss',
			'comments_link_feed',
			'comment_link',
			'comment_author_rss',
			'comment_text_rss',
			'the_category_rss',
			'rss_enclosure',
			'atom_enclosure',
			'self_link',
			'feed_content_type',
			'wp_doing_ajax',
			'wp_doing_cron',
			'file_mod_allowed',
			'the_sites',
			'site_search_columns',
			'sites_clauses',
			'found_sites_query',
			'the_permalink',
			'user_trailingslashit',
			'pre_post_link',
			'post_link_category',
			'post_link',
			'post_type_link',
			'page_link',
			'_get_page_link',
			'attachment_link',
			'year_link',
			'month_link',
			'day_link',
			'the_feed_link',
			'feed_link',
			'post_comments_feed_link',
			'post_comments_feed_link_html',
			'author_feed_link',
			'category_feed_link',
			'tag_feed_link',
			'taxonomy_feed_link',
			'get_edit_tag_link',
			'edit_tag_link',
			'get_edit_term_link',
			'edit_term_link',
			'search_link',
			'search_feed_link',
			'post_type_archive_feed_link',
			'preview_post_link',
			'get_edit_post_link',
			'edit_post_link',
			'get_delete_post_link',
			'get_edit_comment_link',
			'edit_comment_link',
			'get_edit_bookmark_link',
			'edit_bookmark_link',
			'get_edit_user_link',
			'get_pagenum_link',
			'next_posts_link_attributes',
			'previous_posts_link_attributes',
			'navigation_markup_template',
			'get_comments_pagenum_link',
			'next_comments_link_attributes',
			'previous_comments_link_attributes',
			'home_url',
			'site_url',
			'admin_url',
			'includes_url',
			'content_url',
			'plugins_url',
			'network_site_url',
			'network_home_url',
			'network_admin_url',
			'user_admin_url',
			'self_admin_url',
			'set_url_scheme',
			'user_dashboard_url',
			'edit_profile_url',
			'get_canonical_url',
			'pre_get_shortlink',
			'get_shortlink',
			'the_shortlink',
			'pre_get_avatar_data',
			'get_avatar_comment_types',
			'get_avatar_url',
			'theme_file_uri',
			'parent_theme_file_uri',
			'theme_file_path',
			'parent_theme_file_path',
			'privacy_policy_url',
			'the_privacy_policy_link',
			'date_i18n',
			'number_format_i18n',
			'enclosure_links',
			'removable_query_args',
			'status_header',
			'nocache_headers',
			'robots_txt',
			'upload_dir',
			'wp_unique_filename',
			'wp_upload_bits',
			'wp_check_filetype_and_ext',
			'upload_mimes',
			'wp_die_ajax_handler',
			'wp_die_xmlrpc_handler',
			'wp_die_handler',
			'smilies',
			'iis7_supports_permalinks',
			'get_main_network_id',
			'global_terms_enabled',
			'kses_allowed_protocols',
			'wp_checkdate',
			'wp_auth_check_same_domain',
			'wp_delete_file',
			'admin_memory_limit',
			'image_memory_limit',
			'send_site_admin_email_change_email',
			'site_admin_email_change_email',
			'wp_privacy_anonymize_data',
			'wp_privacy_exports_dir',
			'wp_privacy_exports_url',
			'wp_privacy_export_expiration',
			'the_title',
			'the_title',
			'link_category',
			'the_content_rss',
			'icon_dir',
			'attachment_icon',
			'attachment_innerHTML',
			'the_title',
			'index_rel_link',
			'the_title',
			'parent_post_rel_link',
			'richedit_pre',
			'htmledit_pre',
			'shortcut_link',
			'rest_authentication_errors',
			'rest_send_nocache_headers',
			'rest_jsonp_enabled',
			'rest_post_dispatch',
			'rest_pre_serve_request',
			'rest_pre_echo_response',
			'rest_envelope_response',
			'rest_endpoints',
			'rest_pre_dispatch',
			'rest_request_before_callbacks',
			'rest_dispatch_request',
			'rest_request_after_callbacks',
			'rest_index',
			'rest_namespace_index',
			'rest_endpoints_description',
			'rest_route_data',
			'rest_request_parameter_order',
			'rest_request_from_url',
			'rest_comment_query',
			'rest_allow_anonymous_comments',
			'rest_pre_insert_comment',
			'rest_comment_trashable',
			'rest_prepare_comment',
			'rest_preprocess_comment',
			'rest_comment_collection_params',
			'rest_prepare_attachment',
			'rest_prepare_revision',
			'rest_user_query',
			'rest_prepare_user',
			'rest_pre_insert_user',
			'rest_user_collection_params',
			'rest_pre_get_setting',
			'rest_pre_update_setting',
			'rest_prepare_status',
			'rest_prepare_taxonomy',
			'rest_prepare_post_type',
			'rest_response_link_curies',
			'secure_signon_cookie',
			'wp_authenticate_user',
			'wp_authenticate_user',
			'check_is_user_spammed',
			'get_usernumposts',
			'pre_get_blogs_of_user',
			'get_blogs_of_user',
			'wp_dropdown_users_args',
			'wp_dropdown_users',
			'username_exists',
			'validate_username',
			'pre_user_login',
			'illegal_user_logins',
			'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',
			'wp_pre_insert_user_data',
			'insert_user_meta',
			'send_password_change_email',
			'send_email_change_email',
			'password_change_email',
			'email_change_email',
			'user_contactmethods',
			'password_hint',
			'allow_password_reset',
			'password_reset_expiration',
			'password_reset_key_expired',
			'user_registration_email',
			'registration_errors',
			'determine_current_user',
			'new_user_email_content',
			'user_request_confirmed_email_to',
			'user_confirmed_action_email_content',
			'user_request_confirmed_email_subject',
			'user_erasure_fulfillment_email_to',
			'user_erasure_complete_email_subject',
			'user_confirmed_action_email_content',
			'user_request_action_confirmed_message',
			'user_request_action_description',
			'user_request_action_email_content',
			'user_request_action_email_subject',
			'user_request_key_expiration',
			'get_terms_defaults',
			'get_terms_args',
			'list_terms_exclusions',
			'get_terms_fields',
			'terms_clauses',
			'get_terms_orderby',
			'list_pages',
			'register_taxonomy_args',
			'get_categories_taxonomy',
			'get_tags',
			'the_comments',
			'comments_clauses',
			'found_comments_query',
			'get_the_categories',
			'the_category_list',
			'the_category',
			'list_cats',
			'list_cats',
			'wp_dropdown_cats',
			'wp_list_categories',
			'wp_tag_cloud',
			'tag_cloud_sort',
			'wp_generate_tag_cloud_data',
			'wp_generate_tag_cloud',
			'get_the_tags',
			'the_tags',
			'get_the_terms',
			'the_terms',
			'pre_get_main_site_id',
			'network_by_path_segments_count',
			'pre_get_network_by_path',
			'get_site',
			'get_network',
			'pre_http_send_through_proxy',
			'customize_partial_render',
			'customize_dynamic_partial_args',
			'customize_dynamic_partial_class',
			'customize_render_partials_response',
			'wp_query_search_exclusion_prefix',
			'wp_search_stopwords',
			'posts_search',
			'posts_search_orderby',
			'posts_where',
			'posts_join',
			'comment_feed_join',
			'comment_feed_where',
			'comment_feed_groupby',
			'comment_feed_orderby',
			'comment_feed_limits',
			'posts_where_paged',
			'posts_groupby',
			'posts_join_paged',
			'posts_orderby',
			'posts_distinct',
			'post_limits',
			'posts_fields',
			'posts_clauses',
			'posts_where_request',
			'posts_groupby_request',
			'posts_join_request',
			'posts_orderby_request',
			'posts_distinct_request',
			'posts_fields_request',
			'post_limits_request',
			'posts_clauses_request',
			'posts_request',
			'posts_pre_query',
			'split_the_query',
			'posts_request_ids',
			'posts_results',
			'comment_feed_orderby',
			'comment_feed_limits',
			'the_preview',
			'the_posts',
			'found_posts_query',
			'found_posts',
			'content_pagination',
			'embed_handler_html',
			'oembed_ttl',
			'embed_oembed_html',
			'embed_oembed_discover',
			'embed_maybe_make_link',
			'is_protected_meta',
			'register_meta_args',
			'customizer_widgets_section_args',
			'is_wide_widget_in_customizer',
			'widget_customizer_setting_args',
			'search_form_format',
			'get_search_form',
			'loginout',
			'loginout',
			'logout_url',
			'login_url',
			'register_url',
			'login_form_defaults',
			'login_form_top',
			'login_form_middle',
			'login_form_bottom',
			'lostpassword_url',
			'register',
			'bloginfo_url',
			'bloginfo',
			'get_site_icon_url',
			'get_custom_logo',
			'pre_get_document_title',
			'document_title_separator',
			'document_title_parts',
			'wp_title_parts',
			'wp_title',
			'single_post_title',
			'post_type_archive_title',
			'single_cat_title',
			'single_tag_title',
			'single_term_title',
			'get_the_archive_title',
			'get_the_archive_description',
			'get_the_post_type_description',
			'get_archives_link',
			'getarchives_where',
			'getarchives_join',
			'get_calendar',
			'get_calendar',
			'the_date',
			'get_the_date',
			'the_modified_date',
			'get_the_modified_date',
			'the_time',
			'get_the_time',
			'get_post_time',
			'the_modified_time',
			'get_the_modified_time',
			'get_post_modified_time',
			'the_weekday',
			'the_weekday_date',
			'site_icon_meta_tags',
			'wp_resource_hints',
			'user_can_richedit',
			'wp_default_editor',
			'wp_code_editor_settings',
			'get_search_query',
			'the_search_query',
			'language_attributes',
			'paginate_links',
			'wp_admin_css_uri',
			'wp_admin_css',
			'wp_generator_type',
			'the_generator',
			'redirect_canonical',
			'role_has_cap',
			'theme_templates',
			'theme_scandir_exclusions',
			'network_allowed_themes',
			'allowed_themes',
			'site_allowed_themes',
			'site_allowed_themes',
			'wp_http_accept_encoding',
			'',
			'incompatible_sql_modes',
			'query',
			'pre_get_table_charset',
			'pre_get_col_charset',
			'stylesheet',
			'stylesheet_directory',
			'stylesheet_directory_uri',
			'stylesheet_uri',
			'locale_stylesheet_uri',
			'template',
			'template_directory',
			'template_directory_uri',
			'theme_root',
			'theme_root_uri',
			'get_header_image_tag',
			'get_header_video_url',
			'header_video_settings',
			'is_header_video_active',
			'wp_get_custom_css',
			'update_custom_css_data',
			'editor_stylesheets',
			'get_theme_starter_content',
			'rss_update_period',
			'rss_update_frequency',
			'pre_cache_alloptions',
			'alloptions',
			'pre_update_option',
			'register_setting_args',
			'post_thumbnail_size',
			'post_thumbnail_html',
			'the_post_thumbnail_caption',
			'category_description',
			'category_css_class',
			'map_meta_cap',
			'editor_max_image_size',
			'get_image_tag_class',
			'get_image_tag',
			'wp_constrain_dimensions',
			'image_resize_dimensions',
			'image_get_intermediate_size',
			'intermediate_image_sizes',
			'wp_get_attachment_image_src',
			'wp_get_attachment_image_attributes',
			'wp_calculate_image_srcset_meta',
			'max_srcset_image_width',
			'wp_calculate_image_srcset',
			'wp_calculate_image_sizes',
			'img_caption_shortcode',
			'img_caption_shortcode_width',
			'post_gallery',
			'gallery_style',
			'post_playlist',
			'wp_mediaelement_fallback',
			'wp_audio_extensions',
			'wp_get_attachment_id3_keys',
			'wp_audio_shortcode_override',
			'wp_audio_shortcode_library',
			'wp_audio_shortcode_class',
			'wp_audio_shortcode',
			'wp_video_extensions',
			'wp_video_shortcode_override',
			'wp_video_shortcode_library',
			'wp_video_shortcode_class',
			'wp_video_shortcode',
			'upload_size_limit',
			'wp_image_editors',
			'plupload_default_settings',
			'plupload_default_params',
			'wp_prepare_attachment_for_js',
			'media_library_show_audio_playlist',
			'media_library_show_video_playlist',
			'media_library_months_with_files',
			'media_view_settings',
			'media_view_strings',
			'get_attached_media_args',
			'get_attached_media',
			'media_embedded_in_content_allowed_types',
			'get_post_galleries',
			'get_post_gallery',
			'attachment_url_to_postid',
			'site_details',
			'page_css_class',
			'page_menu_link_attributes',
			'xmlrpc_methods',
			'pre_option_enable_xmlrpc',
			'option_enable_xmlrpc',
			'xmlrpc_enabled',
			'xmlrpc_login_error',
			'xmlrpc_blog_options',
			'xmlrpc_prepare_taxonomy',
			'xmlrpc_prepare_term',
			'xmlrpc_prepare_post',
			'xmlrpc_prepare_post_type',
			'xmlrpc_prepare_media_item',
			'xmlrpc_prepare_page',
			'xmlrpc_prepare_comment',
			'xmlrpc_prepare_user',
			'xmlrpc_wp_insert_post_data',
			'xmlrpc_default_post_fields',
			'xmlrpc_default_taxonomy_fields',
			'xmlrpc_default_user_fields',
			'xmlrpc_allow_anonymous_comments',
			'xmlrpc_default_posttype_fields',
			'xmlrpc_default_revision_fields',
			'xmlrpc_text_filters',
			'pingback_ping_source_uri',
			'pre_remote_source',
			'xmlrpc_pingback_error',
			'url_to_postid',
			'wp_editor_set_quality',
			'jpeg_quality',
			'image_editor_default_mime_type',
			'post_format_rewrite_base',
			'get_term',
			'get_terms',
			'pre_category_nicename',
			'wp_get_object_terms_args',
			'get_object_terms',
			'wp_get_object_terms',
			'pre_insert_term',
			'wp_insert_term_data',
			'term_id_filter',
			'wp_unique_term_slug',
			'wp_update_term_parent',
			'wp_update_term_data',
			'term_id_filter',
			'pre_term_link',
			'tag_link',
			'category_link',
			'term_link',
			'https_local_ssl_verify',
			'https_ssl_verify',
			'use_streams_transport',
			'embed_defaults',
			'wp_audio_embed_handler',
			'wp_video_embed_handler',
			'wp_embed_handler_youtube',
			'wp_embed_handler_audio',
			'wp_embed_handler_video',
			'oembed_discovery_links',
			'post_embed_url',
			'oembed_endpoint_url',
			'embed_html',
			'oembed_response_data',
			'the_excerpt_embed',
			'embed_site_title_html',
			'xmlrpc_element_limit',
			'xmlrpc_chunk_parsing_size',
			'embed_thumbnail_id',
			'embed_thumbnail_image_size',
			'embed_thumbnail_image_shape',
			'http_headers_useragent',
			'http_request_args',
			'pre_http_request',
			'https_ssl_verify',
			'http_response',
			'http_api_transports',
			'http_response',
			'block_local_requests',
			'schedule_event',
			'schedule_event',
			'cron_schedules',
			'run_wptexturize',
			'no_texturize_tags',
			'no_texturize_shortcodes',
			'sanitize_file_name_chars',
			'sanitize_file_name',
			'sanitize_user',
			'sanitize_key',
			'sanitize_title',
			'sanitize_html_class',
			'format_to_edit',
			'smilies_src',
			'is_email',
			'sanitize_email',
			'human_time_diff',
			'excerpt_length',
			'excerpt_more',
			'wp_trim_excerpt',
			'wp_trim_words',
			'pre_ent2ncr',
			'format_for_editor',
			'clean_url',
			'js_escape',
			'esc_html',
			'attribute_escape',
			'esc_textarea',
			'tag_escape',
			'wp_parse_str',
			'wp_sprintf',
			'sanitize_text_field',
			'sanitize_textarea_field',
			'sanitize_mime_type',
			'sanitize_trackback_urls',
			'wp_spaces_regexp',
			'process_text_diff_html',
			'user_search_columns',
			'found_users_query',
			'wp_get_nav_menu_object',
			'has_nav_menu',
			'wp_get_nav_menu_name',
			'wp_get_nav_menus',
			'wp_get_nav_menu_items',
			'nav_menu_attr_title',
			'nav_menu_description',
			'wp_setup_nav_menu_item',
			'_wp_post_revision_fields',
			'wp_save_post_revision_post_has_changed',
			'wp_revisions_to_keep',
			'ms_site_check',
			'site_by_path_segments_count',
			'pre_get_site_by_path',
			'the_author',
			'the_modified_author',
			'the_author_posts_link',
			'author_link',
			'is_multi_author',
			'get_comment_author',
			'comment_author',
			'get_comment_author_email',
			'author_email',
			'comment_email',
			'get_comment_author_link',
			'get_comment_author_IP',
			'get_comment_author_url',
			'comment_url',
			'get_comment_author_url_link',
			'comment_class',
			'get_comment_date',
			'comment_excerpt_length',
			'get_comment_excerpt',
			'comment_excerpt',
			'get_comment_ID',
			'get_comment_link',
			'get_comments_link',
			'get_comments_number',
			'comments_number',
			'get_comment_text',
			'comment_text',
			'get_comment_time',
			'get_comment_type',
			'trackback_url',
			'comments_open',
			'pings_open',
			'comments_template_query_args',
			'comments_array',
			'comments_template',
			'respond_link',
			'comments_popup_link_attributes',
			'comment_reply_link_args',
			'comment_reply_link',
			'post_comments_link',
			'cancel_comment_reply_link',
			'comment_id_fields',
			'wp_list_comments_args',
			'comment_form_default_fields',
			'comment_form_defaults',
			'comment_form_logged_in',
			'comment_form_fields',
			'comment_form_field_comment',
			'comment_form_submit_button',
			'comment_form_submit_field',
			'get_bookmarks',
			'dynamic_sidebar_params',
			'dynamic_sidebar_has_widgets',
			'is_active_sidebar',
			'sidebars_widgets',
			'customize_control_active',
			'locale',
			'locale',
			'gettext',
			'gettext_with_context',
			'ngettext',
			'ngettext_with_context',
			'override_load_textdomain',
			'load_textdomain_mofile',
			'override_unload_textdomain',
			'plugin_locale',
			'plugin_locale',
			'theme_locale',
			'get_available_languages',
			'the_networks',
			'networks_clauses',
			'found_networks_query',
			'query_vars',
			'request',
			'wp_headers',
			'query_string',
			'widget_categories_dropdown_args',
			'widget_categories_args',
			'widget_title',
			'widget_links_args',
			'widget_nav_menu_args',
			'widget_text',
			'widget_text_content',
			'widget_custom_html_content',
			'comment_max_links_url',
			'get_comment',
			'get_default_comment_status',
			'comment_cookie_lifetime',
			'pre_comment_author_name',
			'pre_comment_author_email',
			'pre_comment_author_url',
			'duplicate_comment_id',
			'pre_comment_approved',
			'comment_flood_filter',
			'get_page_of_comment',
			'wp_get_comment_fields_max_lengths',
			'wp_count_comments',
			'wp_get_current_commenter',
			'pre_user_id',
			'pre_comment_user_agent',
			'pre_comment_content',
			'pre_comment_user_ip',
			'preprocess_comment',
			'notify_post_author',
			'comment_save_pre',
			'wp_update_comment_data',
			'pre_wp_update_comment_count_now',
			'pingback_useragent',
			'close_comments_for_post_types',
			'close_comments_for_post_types',
			'wp_anonymize_comment',
			'customize_nav_menu_available_items',
			'customize_nav_menu_searched_items',
			'customize_nav_menu_available_item_types',
			'wp_nav_menu_args',
			'pre_wp_nav_menu',
			'wp_nav_menu_container_allowedtags',
			'wp_nav_menu_objects',
			'wp_nav_menu_items',
			'wp_nav_menu',
			'nav_menu_submenu_css_class',
			'nav_menu_item_args',
			'nav_menu_css_class',
			'nav_menu_item_id',
			'nav_menu_link_attributes',
			'nav_menu_item_title',
			'walker_nav_menu_start_el',
			'get_meta_sql',
			'meta_query_find_compatible_table_alias',
			'widget_display_callback',
			'widget_update_callback',
			'widget_form_callback',
			'wp_xmlrpc_server_class',
			'comment_post_redirect',
			'edit_comment_misc_actions',
			'myblogs_options',
			'myblogs_blog_actions',
			'wp_nav_locations_listed_per_menu',
			'redirect_term_location',
			'taxonomy_parent_dropdown_args',
			'whitelist_options',
			'redirect_user_admin_request',
			'delete_site_email_content',
			'admin_title',
			'admin_body_class',
			'parent_file',
			'submenu_file',
			'export_args',
			'bulk_post_updated_messages',
			'user_profile_picture_description',
			'post_updated_messages',
			'enter_title_here',
			'tables_to_repair',
			'thread_comments_depth_max',
			'avatar_defaults',
			'default_avatar_select',
			'redirect_network_admin_request',
			'mu_menu_items',
			'media_upload_default_type',
			'media_upload_default_tab',
			'pre_user_login',
			'date_formats',
			'time_formats',
			'admin_footer_text',
			'update_footer',
			'install_themes_tabs',
			'available_permalink_structure_tags',
			'editable_slug',
			'wp_header_image_attachment_metadata',
			'theme_action_links',
			'theme_row_meta',
			'heartbeat_nopriv_received',
			'heartbeat_nopriv_send',
			'term_search_min_chars',
			'wp_check_post_lock_window',
			'ajax_query_attachments_args',
			'wp_refresh_nonces',
			'heartbeat_received',
			'heartbeat_send',
			'wp_ajax_cropped_attachment_metadata',
			'wp_ajax_cropped_attachment_id',
			'wp_privacy_personal_data_exporters',
			'wp_privacy_personal_data_export_page',
			'wp_privacy_personal_data_erasers',
			'wp_privacy_personal_data_erasure_page',
			'intermediate_image_sizes_advanced',
			'attachment_thumbnail_args',
			'fallback_intermediate_image_sizes',
			'wp_generate_attachment_metadata',
			'wp_read_image_metadata',
			'file_is_displayable_image',
			'load_image_to_edit',
			'load_image_to_edit_filesystempath',
			'load_image_to_edit_attachmenturl',
			'load_image_to_edit_path',
			'wpmu_users_columns',
			'ms_user_list_site_actions',
			'ms_user_row_actions',
			'default_content',
			'default_title',
			'default_excerpt',
			'edit_posts_per_page',
			'upload_per_page',
			'get_sample_permalink',
			'get_sample_permalink_html',
			'admin_post_thumbnail_size',
			'admin_post_thumbnail_html',
			'override_post_lock',
			'redirect_post_location',
			'default_hidden_columns',
			'hidden_columns',
			'default_hidden_meta_boxes',
			'hidden_meta_boxes',
			'months_dropdown_results',
			'list_table_primary_column',
			'update_right_now_text',
			'install_themes_nonmenu_tabs',
			'theme_install_actions',
			'plugin_files_exclusions',
			'translations_api',
			'translations_api_result',
			'add_menu_classes',
			'menu_order',
			'manage_pages_columns',
			'manage_posts_columns',
			'post_date_column_status',
			'post_date_column_time',
			'page_row_actions',
			'post_row_actions',
			'quick_edit_dropdown_pages_args',
			'all_plugins',
			'show_network_active_plugins',
			'network_admin_plugin_action_links',
			'plugin_action_links',
			'plugin_row_meta',
			'install_plugin_complete_actions',
			'wp_terms_checklist_args',
			'wp_comment_reply',
			'postmeta_form_keys',
			'postmeta_form_limit',
			'import_upload_size_limit',
			'display_post_states',
			'display_media_states',
			'export_wp_filename',
			'the_content_export',
			'the_excerpt_export',
			'update_bulk_plugins_complete_actions',
			'get_editable_authors',
			'get_others_drafts',
			'wp_create_thumbnail',
			'site_icon_attachment_metadata',
			'site_icon_image_sizes',
			'site_icon_image_sizes',
			'update_feedback',
			'editable_roles',
			'get_users_drafts',
			'post_types_to_delete_with_user',
			'manage_taxonomies_for_attachment_columns',
			'manage_media_columns',
			'media_row_actions',
			'update_bulk_theme_complete_actions',
			'install_theme_complete_actions',
			'update_theme_complete_actions',
			'install_plugins_tabs',
			'install_plugins_nonmenu_tabs',
			'plugin_install_action_links',
			'post_edit_category_parent_dropdown_args',
			'page_attributes_dropdown_pages_args',
			'default_page_template_title',
			'users_list_table_query_args',
			'user_row_actions',
			'manage_users_custom_column',
			'get_role_list',
			'comments_per_page',
			'comment_status_links',
			'term_updated_messages',
			'contextual_help_list',
			'contextual_help',
			'default_contextual_help',
			'screen_layout_columns',
			'screen_settings',
			'screen_options_show_screen',
			'screen_options_show_submit',
			'view_mode_post_types',
			'edit_tags_per_page',
			'tagsperpage',
			'edit_categories_per_page',
			'term_name',
			'tag_row_actions',
			'automatic_updater_disabled',
			'automatic_updates_is_vcs_checkout',
			'auto_core_update_email',
			'automatic_updates_debug_email',
			'async_update_translation',
			'plugins_api_args',
			'plugins_api',
			'plugins_api_result',
			'upgrader_pre_download',
			'upgrader_pre_install',
			'upgrader_source_selection',
			'upgrader_clear_destination',
			'upgrader_post_install',
			'upgrader_package_options',
			'themes_api_args',
			'themes_api',
			'themes_api_result',
			'pre_prepare_themes_for_js',
			'wp_prepare_themes_for_js',
			'dbdelta_queries',
			'dbdelta_create_queries',
			'dbdelta_insert_queries',
			'wp_should_upgrade_global_tables',
			'ms_sites_list_table_query_args',
			'wpmu_blogs_columns',
			'manage_sites_action_links',
			'wp_network_dashboard_widgets',
			'wp_user_dashboard_widgets',
			'wp_dashboard_widgets',
			'dashboard_glance_items',
			'privacy_on_link_title',
			'privacy_on_link_text',
			'dashboard_recent_drafts_query_args',
			'comment_row_actions',
			'dashboard_recent_posts_query_args',
			'browse-happy-notice',
			'try_gutenberg_learn_more_link',
			'allow_minor_auto_core_updates',
			'allow_major_auto_core_updates',
			'media_upload_tabs',
			'image_send_to_editor',
			'image_add_caption_text',
			'image_add_caption_shortcode',
			'media_buttons_context',
			'attachment_fields_to_save',
			'media_send_to_editor',
			'image_send_to_editor_url',
			'attachment_fields_to_edit',
			'get_media_item_args',
			'media_meta',
			'get_media_item_args',
			'attachment_fields_to_edit',
			'upload_post_params',
			'plupload_init',
			'media_upload_form_url',
			'media_upload_form_url',
			'type_url_form_media',
			'media_upload_form_url',
			'media_upload_form_url',
			'media_upload_mime_type_links',
			'media_meta',
			'media_submitbox_misc_sections',
			'audio_submitbox_misc_sections',
			'wp_read_video_metadata',
			'got_rewrite',
			'got_url_rewrite',
			'documentation_ignore_functions',
			'set-screen-option',
			'admin_referrer_policy',
			'new_admin_email_content',
			'wp_get_default_privacy_policy_content',
			'terms_to_edit',
			'populate_network_meta',
			'update_plugin_complete_actions',
			'update_translations_complete_actions',
			'nav_menu_meta_box_object',
			'wp_edit_nav_menu_walker',
			'revision_text_diff_options',
			'wp_get_revision_ui_diff',
			'wp_prepare_revision_for_js',
			'wpmu_drop_tables',
			'wpmu_delete_blog_upload_dir',
			'lang_codes',
			'mu_dropdown_languages',
			'can_edit_network',
			'comment_edit_pre',
			'editable_extensions',
			'wp_theme_editor_filetypes',
			'pre_move_uploaded_file',
			'filesystem_method_file',
			'filesystem_method',
			'request_filesystem_credentials',
			'fs_ftp_connection_types',
			'wp_privacy_personal_data_email_content',
			'image_editor_save_pre',
			'image_save_pre',
			'wp_save_image_editor_file',
			'wp_save_image_file',
			'wp_image_editor_before_change',
			'image_edit_before_change',
			'comment_edit_redirect',
			'shake_error_codes',
			'login_title',
			'login_headerurl',
			'login_headertitle',
			'login_body_class',
			'login_message',
			'login_errors',
			'login_messages',
			'retrieve_password_title',
			'retrieve_password_message',
			'login_link_separator',
			'post_password_expires',
			'logout_redirect',
			'lostpassword_redirect',
			'wp_signup_location',
			'registration_redirect',
			'login_redirect',
			'wp_login_errors',
			'wp_mail_original_content',
			'phone_content',
		);
	}

	/**
	 * Load the generator tabs.
	 *
	 * @return void
	 */
	protected function load_tabs() {
		$this->tabs = array(
			'info' => array(
				'label'   => __( 'Info', 'insert-headers-and-footers' ),
				'columns' => array(
					// Column 1.
					array(
						// Column 1 fields.
						array(
							'type'    => 'description',
							'label'   => __( 'Overview', 'insert-headers-and-footers' ),
							'content' => sprintf(
							// Translators: Placeholders add links to the wordpress.org references.
								__( 'Using this generator you can safely add custom %1$shooks%2$s using either %3$sadd_action%4$s or %5$sadd_filter%6$s.', 'insert-headers-and-footers' ),
								'<a href="https://developer.wordpress.org/reference/hooks/" target="_blank">',
								'</a>',
								'<a href="https://developer.wordpress.org/reference/functions/add_action/" target="_blank">',
								'</a>',
								'<a href="https://developer.wordpress.org/reference/functions/add_filter/" target="_blank">',
								'</a>'
							),
						),
					),
					// Column 2.
					array(
						// Column 2 fields.
						array(
							'type'    => 'list',
							'label'   => __( 'Usage', 'insert-headers-and-footers' ),
							'content' => array(
								__( 'Fill in the forms using the menu on the left.', 'insert-headers-and-footers' ),
								__( 'Click the "Update Code" button.', 'insert-headers-and-footers' ),
								__( 'Click on "Use Snippet" to create a new snippet with the generated code.', 'insert-headers-and-footers' ),
								__( 'Activate and save the snippet and you\'re ready to go', 'insert-headers-and-footers' ),
							),
						),
					),
					// Column 3.
					array(
						// Column 3 fields.
						array(
							'type'    => 'description',
							'label'   => __( 'Examples', 'insert-headers-and-footers' ),
							'content' => __( 'You can use this to quickly get started with adding an action or filter.', 'insert-headers-and-footers' ),
						),
					),
				),
			),
			'hook' => array(
				'label'   => __( 'Hook Details', 'insert-headers-and-footers' ),
				'columns' => array(
					// Column 1.
					array(
						array(
							'type'        => 'select',
							'label'       => __( 'Hook type', 'insert-headers-and-footers' ),
							'description' => __( 'Can be either an action or a filter', 'insert-headers-and-footers' ),
							'id'          => 'hook_type',
							'default'     => 'add_action',
							'options'     => array(
								'add_action' => __( 'Action', 'insert-headers-and-footers' ),
								'add_filter' => __( 'Filter', 'insert-headers-and-footers' ),
							),
						),
						array(
							'type'         => 'text',
							'label'        => __( 'Hook name', 'insert-headers-and-footers' ),
							'description'  => __( 'Input hook name or pick one from the suggested list as you type.', 'insert-headers-and-footers' ),
							'id'           => 'hook_name',
							'default'      => '',
							'autocomplete' => $this->get_all_hooks_options(),
						),
					),
					// Column 2.
					array(
						array(
							'type'        => 'text',
							'label'       => __( 'Callback function', 'insert-headers-and-footers' ),
							'description' => __( 'Name of the function you want to add to this hook.', 'insert-headers-and-footers' ),
							'id'          => 'callback',
							'default'     => 'custom_function_' . time(),
						),
						array(
							'type'        => 'text',
							'label'       => __( 'Priority', 'insert-headers-and-footers' ),
							'description' => __( 'Priority of this hook, by default 10.', 'insert-headers-and-footers' ),
							'id'          => 'priority',
							'default'     => '10',
						),
					),
					// Column 3.
					array(
						array(
							'type'        => 'text',
							'label'       => __( 'Arguments list', 'insert-headers-and-footers' ),
							'description' => __( 'Add comma-separated custom arguments that will be passed to the callback function depending on the action/filter.', 'insert-headers-and-footers' ),
							'id'          => 'arguments',
							'default'     => '',
						),
					),
				),
			),
			'code' => array(
				'label'   => __( 'Code', 'insert-headers-and-footers' ),
				'columns' => array(
					// Column 1.
					array(
						array(
							'type'        => 'textarea',
							'label'       => __( 'PHP Code', 'insert-headers-and-footers' ),
							'description' => __( 'Custom PHP code you want to run in the function, you can also edit this after you create the snippet.', 'insert-headers-and-footers' ),
							'id'          => 'code',
							'code'        => true,
						),
					),
				),
			),
		);
	}

	/**
	 * Get the snippet code with dynamic values applied.
	 *
	 * @return string
	 */
	public function get_snippet_code() {

		$arguments = $this->get_value( 'arguments' );

		$arguments_array = explode( ',', $arguments );
		$arguments_array = array_map( 'trim', $arguments_array );
		$count           = count( $arguments_array );
		if ( $count > 1 ) {
			$count = ", $count";
		} else {
			$count = '';
		}
		$arguments_formatted = implode( ', ', $arguments_array );
		$priority            = intval( $this->get_value( 'priority' ) );
		$callback            = str_replace( '-', '_', sanitize_title_with_dashes( $this->get_value( 'callback' ) ) );

		return '// Add a hook.
function ' . $callback . '( ' . $arguments_formatted . ' ) {
' . $this->get_value( 'code' ) . '
}
' . $this->get_value( 'hook_type' ) . '( \'' . $this->get_value( 'hook_name' ) . '\', \'' . $callback . '\', ' . $priority . $count . ' );';
	}

}
