<?php
/**
* Clarkson Core Twig extension.
*/
namespace Clarkson_Core;
/**
* Class Clarkson_Core\Twig_Extension.
* @internal
*/
class Twig_Extension extends \Twig\Extension\AbstractExtension {
/**
* Twig functions.
*
* @var array $functions Twig functions.
*/
private $functions = array(
'get_search_query',
'get_adjacent_post',
'get_boundary_post',
'get_children',
'get_extended',
'get_next_post',
'get_next_posts_link',
'next_posts_link',
'posts_nav_link',
'get_permalink',
'the_permalink',
'get_the_excerpt',
'the_excerpt',
'get_the_post_thumbnail',
'get_post',
'get_post_field',
'get_post_ancestors',
'get_post_mime_type',
'get_post_status',
'get_post_format',
'set_post_format',
'get_delete_post_link',
'get_previous_post',
'get_previous_posts_link',
'previous_posts_link',
'have_posts',
'is_post',
'is_single',
'is_sticky',
'get_the_ID',
'the_ID',
'the_post',
'wp_get_recent_posts',
'wp_get_single_post',
'has_post_thumbnail',
'has_excerpt',
'has_post_format',
'register_post_type',
'is_post_type_archive',
'post_type_archive_title',
'add_post_type_support',
'remove_post_type_support',
'post_type_supports',
'set_post_type',
'post_type_exists',
'get_post_type',
'get_post_types',
'get_post_type_archive_link',
'get_post_type_object',
'get_post_type_capabilities',
'get_post_type_labels',
'is_post_type_hierarchical',
'wp_delete_post',
'wp_insert_post',
'wp_publish_post',
'wp_trash_post',
'wp_update_post',
'get_all_page_ids',
'get_ancestors',
'get_page',
'get_page_link',
'get_page_by_path',
'get_page_by_title',
'get_page_children',
'get_page_hierarchy',
'get_page_uri',
'get_pages',
'is_page',
'page_uri_index',
'wp_link_pages',
'wp_dropdown_pages',
'add_post_meta',
'delete_post_meta',
'get_post_custom',
'get_post_custom_keys',
'get_post_custom_values',
'get_post_meta',
'update_post_meta',
'register_meta',
'get_attached_file',
'image_resize',
'is_attachment',
'is_local_attachment',
'set_post_thumbnail',
'update_attached_file',
'wp_attachment_is_image',
'wp_create_thumbnail',
'wp_insert_attachment',
'wp_delete_attachment',
'wp_get_attachment_image',
'wp_get_attachment_link',
'wp_get_attachment_image_src',
'wp_get_attachment_metadata',
'wp_get_attachment_thumb_file',
'wp_get_attachment_thumb_url',
'wp_get_attachment_url',
'wp_check_for_changed_slugs',
'wp_count_posts',
'wp_get_mime_types',
'wp_mime_type_icon',
'wp_generate_attachment_metadata',
'wp_prepare_attachment_for_js',
'wp_update_attachment_metadata',
'get_bookmark',
'get_bookmarks',
'wp_get_post_categories',
'wp_set_post_categories',
'wp_get_post_tags',
'wp_set_post_tags',
'wp_get_post_terms',
'wp_set_post_terms',
'wp_count_terms',
'has_term',
'is_object_in_term',
'add_meta_box',
'remove_meta_box',
'get_the_ID',
'the_ID',
'get_the_author',
'the_author',
'get_the_author_posts',
'get_the_content',
'the_content',
'get_the_title',
'the_title',
'the_title_attribute',
'register_post_status',
'wp_trim_excerpt',
'wp_get_post_revision',
'wp_get_post_revisions',
'wp_is_post_revision',
'paginate_links',
'cat_is_ancestor_of',
'get_all_category_ids',
'get_ancestors',
'get_cat_ID',
'get_cat_name',
'get_categories',
'get_category',
'get_category_by_path',
'get_category_by_slug',
'get_the_category_by_ID',
'get_the_category_list',
'get_category_link',
'get_category_parents',
'get_the_category',
'single_cat_title',
'in_category',
'is_category',
'the_category',
'wp_category_checklist',
'wp_dropdown_categories',
'wp_list_categories',
'wp_create_category',
'wp_delete_category',
'wp_insert_category',
'get_tag',
'get_tag_link',
'get_tags',
'get_the_tag_list',
'get_the_tags',
'has_tag',
'is_tag',
'the_tags',
'single_tag_title',
'tag_description',
'wp_generate_tag_cloud',
'wp_tag_cloud',
'get_edit_term_link',
'get_taxonomy',
'get_taxonomies',
'get_term',
'get_the_term_list',
'get_term_by',
'the_terms',
'get_the_terms',
'get_term_children',
'get_term_link',
'get_terms',
'is_tax',
'is_taxonomy',
'is_taxonomy_hierarchical',
'is_term',
'taxonomy_exists',
'term_exists',
'register_taxonomy',
'register_taxonomy_for_object_type',
'wp_get_object_terms',
'wp_remove_object_terms',
'wp_set_object_terms',
'wp_insert_term',
'wp_update_term',
'wp_delete_term',
'wp_terms_checklist',
'add_cap',
'add_role',
'author_can',
'current_user_can',
'current_user_can_for_blog',
'get_role',
'get_super_admins',
'is_super_admin',
'map_meta_cap',
'remove_cap',
'remove_role',
'user_can',
'auth_redirect',
'count_users',
'count_user_posts',
'count_many_users_posts',
'email_exists',
'get_currentuserinfo',
'get_current_user_id',
'get_profile',
'get_user_by',
'get_userdata',
'get_usernumposts',
'get_users',
'set_current_user',
'user_pass_ok',
'wp_authenticate',
'username_exists',
'validate_username',
'wp_dropdown_users',
'wp_get_current_user',
'wp_set_current_user',
'wp_set_password',
'get_author_posts_url',
'get_the_modified_author',
'is_multi_author',
'add_user_meta',
'delete_user_meta',
'get_user_meta',
'update_user_meta',
'get_the_author_meta',
'wp_create_user',
'wp_delete_user',
'wp_insert_user',
'wp_update_user',
'is_user_logged_in',
'wp_login_form',
'wp_signon',
'wp_logout',
'wp_loginout',
'bloginfo_rss',
'comment_author_rss',
'comment_link',
'comment_text_rss',
'do_feed',
'do_feed_atom',
'do_feed_rdf',
'do_feed_rss',
'do_feed_rss2',
'fetch_feed',
'fetch_rss',
'get_author_feed_link',
'get_bloginfo_rss',
'get_category_feed_link',
'get_comment_link',
'get_comment_author_rss',
'get_post_comments_feed_link',
'get_rss',
'get_search_comments_feed_link',
'get_search_feed_link',
'get_the_category_rss',
'get_the_title_rss',
'post_comments_feed_link',
'rss_enclosure',
'the_title_rss',
'the_category_rss',
'the_content_rss',
'the_excerpt_rss',
'wp_rss',
'wp_remote_get',
'wp_remote_retrieve_body',
'wp_get_http_headers',
'wp_remote_fopen',
'add_ping',
'add_comment_meta',
'check_comment',
'comment_text',
'comment_form',
'comments_number',
'discover_pingback_server_uri',
'delete_comment_meta',
'do_all_pings',
'do_enclose',
'do_trackbacks',
'generic_ping',
'get_approved_comments',
'get_avatar',
'get_comment',
'get_comment_text',
'get_comment_meta',
'get_comments',
'wp_list_comments',
'get_enclosed',
'get_lastcommentmodified',
'get_pung',
'get_to_ping',
'have_comments',
'get_comment_author',
'is_trackback',
'pingback',
'privacy_ping_filter',
'sanitize_comment_cookies',
'trackback',
'trackback_url',
'trackback_url_list',
'update_comment_meta',
'weblog_ping',
'wp_allow_comment',
'wp_count_comments',
'wp_delete_comment',
'wp_filter_comment',
'wp_get_comment_status',
'wp_get_current_commenter',
'wp_insert_comment',
'wp_new_comment',
'wp_set_comment_status',
'wp_throttle_comment_flood',
'wp_update_comment',
'wp_update_comment_count',
'wp_update_comment_count_now',
'comment_class',
'comment_ID',
'comment_author',
'comment_date',
'comment_time',
'get_comment_date',
'get_comment_time',
'paginate_comments_links',
'previous_comments_link',
'next_comments_link',
'get_comment_pages_count',
'has_filter',
'add_filter',
'apply_filters',
'apply_filters_ref_array',
'current_filter',
'merge_filters',
'remove_filter',
'remove_all_filters',
'has_action',
'add_action',
'do_action',
'do_action_ref_array',
'did_action',
'remove_action',
'remove_all_actions',
'plugin_basename',
'plugins_url',
'get_plugin_data',
'get_admin_page_title',
'plugin_dir_path',
'register_activation_hook',
'register_deactivation_hook',
'menu_page_url',
'is_plugin_active',
'is_plugin_active_for_network',
'is_plugin_inactive',
'is_plugin_page',
'add_contextual_help',
'get_plugins',
'is_active_widget',
'register_widget',
'the_widget',
'unregister_widget',
'wp_add_dashboard_widget',
'wp_convert_widget_settings',
'wp_get_sidebars_widgets',
'wp_get_widget_defaults',
'wp_register_sidebar_widget',
'wp_register_widget_control',
'wp_set_sidebars_widgets',
'wp_unregister_sidebar_widget',
'wp_unregister_widget_control',
'wp_widget_description',
'register_setting',
'unregister_setting',
'settings_fields',
'do_settings_fields',
'do_settings_sections',
'add_settings_field',
'add_settings_section',
'add_settings_error',
'get_settings_errors',
'settings_errors',
'add_shortcode',
'do_shortcode',
'do_shortcode_tag',
'get_shortcode_regex',
'remove_shortcode',
'remove_all_shortcodes',
'shortcode_atts',
'shortcode_parse_atts',
'strip_shortcodes',
'comments_template',
'get_footer',
'get_header',
'get_sidebar',
'get_search_form',
'add_custom_background',
'add_custom_image_header',
'add_image_size',
'add_theme_support',
'body_class',
'current_theme_supports',
'dynamic_sidebar',
'get_404_template',
'get_archive_template',
'get_attachment_template',
'get_author_template',
'get_body_class',
'get_category_template',
'get_comments_popup_template',
'get_current_theme',
'get_date_template',
'get_header_image',
'get_header_textcolor',
'get_home_template',
'get_locale_stylesheet_uri',
'get_page_template',
'get_paged_template',
'get_post_class',
'get_query_template',
'get_search_template',
'get_single_template',
'get_stylesheet',
'get_stylesheet_directory',
'get_stylesheet_directory_uri',
'get_stylesheet_uri',
'get_tag_template',
'get_taxonomy_template',
'get_template',
'get_template_directory',
'get_template_directory_uri',
'get_template_part',
'get_theme',
'wp_get_themes',
'get_theme_data',
'get_theme_support',
'get_theme_mod',
'get_theme_mods',
'get_theme_root',
'get_theme_roots',
'get_theme_root_uri',
'get_themes',
'header_image',
'header_textcolor',
'in_the_loop',
'is_child_theme',
'is_active_sidebar',
'is_admin_bar_showing',
'is_dynamic_sidebar',
'language_attributes',
'load_template',
'locale_stylesheet',
'locate_template',
'post_class',
'preview_theme',
'preview_theme_ob_filter',
'preview_theme_ob_filter_callback',
'register_nav_menu',
'register_nav_menus',
'get_registered_nav_menus',
'register_sidebar',
'register_sidebars',
'register_theme_directory',
'remove_theme_mod',
'remove_theme_mods',
'remove_theme_support',
'require_if_theme_supports',
'search_theme_directories',
'set_theme_mod',
'switch_theme',
'validate_current_theme',
'unregister_nav_menu',
'unregister_sidebar',
'wp_add_inline_style',
'wp_clean_themes_cache',
'wp_get_archives',
'wp_get_nav_menu_items',
'wp_get_theme',
'wp_nav_menu',
'wp_oembed_remove_provider',
'wp_page_menu',
'wp_title',
'absint',
'add_magic_quotes',
'addslashes_gpc',
'antispambot',
'attribute_escape',
'backslashit',
'balanceTags',
'clean_pre',
'clean_url',
'convert_chars',
'convert_smilies',
'ent2ncr',
'esc_attr',
'esc_html',
'esc_js',
'esc_textarea',
'esc_sql',
'esc_url',
'esc_url_raw',
'force_balance_tags',
'format_to_edit',
'format_to_post',
'funky_javascript_fix',
'htmlentities2',
'is_email',
'js_escape',
'make_clickable',
'popuplinks',
'remove_accents',
'sanitize_email',
'sanitize_file_name',
'sanitize_html_class',
'sanitize_key',
'sanitize_mime_type',
'sanitize_option',
'sanitize_sql_orderby',
'sanitize_text_field',
'sanitize_title',
'sanitize_title_for_query',
'sanitize_title_with_dashes',
'sanitize_user',
'seems_utf8',
'stripslashes_deep',
'trailingslashit',
'untrailingslashit',
'urlencode_deep',
'url_shorten',
'utf8_uri_encode',
'wpautop',
'wptexturize',
'wp_filter_kses',
'wp_filter_post_kses',
'wp_filter_nohtml_kses',
'wp_iso_descrambler',
'wp_kses',
'wp_kses_array_lc',
'wp_kses_attr',
'wp_kses_bad_protocol',
'wp_kses_bad_protocol_once',
'wp_kses_bad_protocol_once2',
'wp_kses_check_attr_val',
'wp_kses_decode_entities',
'wp_kses_hair',
'wp_kses_hook',
'wp_kses_html_error',
'wp_kses_js_entities',
'wp_kses_no_null',
'wp_kses_normalize_entities',
'wp_kses_normalize_entities2',
'wp_kses_split',
'wp_kses_split2',
'wp_kses_stripslashes',
'wp_kses_version',
'wp_make_link_relative',
'wp_normalize_path',
'wp_rel_nofollow',
'wp_richedit_pre',
'wp_specialchars',
'wp_trim_words',
'zeroise',
'current_time',
'date_i18n',
'get_calendar',
'get_date_from_gmt',
'get_lastpostdate',
'get_lastpostmodified',
'get_day_link',
'get_gmt_from_date',
'get_month_link',
'the_date',
'get_the_date',
'the_time',
'get_the_time',
'the_modified_time',
'get_the_modified_time',
'get_weekstartend',
'get_year_link',
'human_time_diff',
'is_new_day',
'iso8601_timezone_to_offset',
'iso8601_to_datetime',
'mysql2date',
'is_serialized',
'is_serialized_string',
'maybe_serialize',
'maybe_unserialize',
'add_option',
'add_site_option',
'delete_option',
'delete_site_option',
'form_option',
'get_alloptions',
'get_site_option',
'get_site_url',
'get_admin_url',
'get_user_option',
'get_option',
'update_option',
'update_site_option',
'update_user_option',
'wp_load_alloptions',
'set_transient',
'get_transient',
'delete_transient',
'set_site_transient',
'get_site_transient',
'delete_site_transient',
'add_menu_page',
'remove_menu_page',
'add_submenu_page',
'remove_submenu_page',
'add_object_page',
'add_utility_page',
'add_comments_page',
'add_dashboard_page',
'add_links_page',
'add_management_page',
'add_media_page',
'add_options_page',
'add_pages_page',
'add_plugins_page',
'add_posts_page',
'add_theme_page',
'add_users_page',
'add_node',
'remove_node',
'add_group',
'get_node',
'get_nodes',
'checked',
'disabled',
'selected',
'submit_button',
'get_submit_button',
'check_admin_referer',
'check_ajax_referer',
'wp_create_nonce',
'wp_explain_nonce',
'wp_get_original_referer',
'wp_get_referer',
'wp_nonce_ays',
'wp_nonce_field',
'wp_nonce_url',
'wp_original_referer_field',
'wp_referer_field',
'wp_send_json',
'wp_send_json_error',
'wp_send_json_success',
'wp_verify_nonce',
'xmlrpc_getpostcategory',
'xmlrpc_getposttitle',
'xmlrpc_removepostdata',
'user_pass_ok',
'__',
'_x',
'_n',
'_ngettext', // deprecated function.
'_n_noop',
'_nx',
'_nx_noop',
'translate_nooped_plural',
'_e',
'_ex',
'esc_attr_e',
'esc_attr_x',
'esc_attr__',
'esc_html_e',
'esc_html_x',
'esc_html__',
'get_locale',
'load_default_textdomain',
'load_plugin_textdomain',
'load_textdomain',
'load_theme_textdomain',
'is_rtl',
'spawn_cron',
'wp_clear_scheduled_hook',
'wp_cron',
'wp_get_schedule',
'wp_get_schedules',
'wp_next_scheduled',
'wp_reschedule_event',
'wp_schedule_event',
'wp_schedule_single_event',
'wp_unschedule_event',
'wp_dequeue_script',
'wp_dequeue_style',
'wp_deregister_script',
'wp_deregister_style',
'wp_enqueue_script',
'wp_enqueue_style',
'wp_localize_script',
'wp_register_script',
'wp_register_style',
'wp_script_is',
'wp_style_is',
'get_tax_sql',
'get_meta_sql',
'get_posts_by_author_sql',
'add_editor_style',
'add_query_arg',
'admin_url',
'bool_from_yn',
'cache_javascript_headers',
'capital_P_dangit',
'clean_blog_cache',
'content_url',
'do_robots',
'flush_rewrite_rules',
'get_bloginfo',
'get_num_queries',
'get_post_stati',
'get_post_statuses',
'get_query_var',
'home_url',
'get_home_url',
'includes_url',
'is_blog_installed',
'is_main_site',
'is_main_query',
'is_multisite',
'is_ssl',
'is_wp_error',
'log_app',
'make_url_footnote',
'network_admin_url',
'network_home_url',
'network_site_url',
'nocache_headers',
'plugin_dir_url',
'query_posts',
'remove_query_arg',
'rewind_posts',
'setup_postdata',
'site_url',
'status_header',
'unzip_file',
'validate_file',
'validate_file_to_edit',
'wp',
'wp_cache_set',
'wp_cache_get',
'wp_cache_reset',
'wp_check_filetype',
'wp_clearcookie',
'wp_die',
'wp_editor',
'wp_footer',
'wp_get_cookie_login',
'wp_get_image_editor',
'wp_get_installed_translations',
'wp_hash',
'wp_handle_sideload',
'wp_head',
'wp_install_defaults',
'wp_is_mobile',
'wp_mail',
'wp_mkdir_p',
'wp_new_user_notification',
'wp_password_change_notification',
'wp_notify_moderator',
'wp_notify_postauthor',
'wp_parse_args',
'wp_redirect',
'wp_reset_postdata',
'wp_reset_query',
'wp_salt',
'wp_set_auth_cookie',
'wp_safe_redirect',
'wp_upload_bits',
'wp_upload_dir',
'wp_list_pluck',
'wp_text_diff',
'post_submit_meta_box',
'confirm_delete_users',
'is_user_member_of_blog',
'wp_dashboard_quota',
'admin_notice_feed',
'avoid_blog_page_permalink_collision',
'check_import_new_users',
'check_upload_size',
'choose_primary_blog',
'display_space_usage',
'fix_import_form_size',
'format_code_lang',
'get_site_allowed_themes',
'grant_super_admin',
'ms_deprecated_blogs_file',
'mu_dropdown_languages',
'new_user_email_admin_notice',
'redirect_user_to_blog',
'refresh_user_details',
'revoke_super_admin',
'secret_salt_warning',
'send_confirmation_on_profile_email',
'show_post_thumbnail_warning',
'site_admin_notice',
'sync_category_tag_slugs',
'update_option_new_admin_email',
'update_user_status',
'upload_is_user_over_quote',
'upload_space_setting',
'wpmu_delete_blog',
'wpmu_delete_user',
'wpmu_get_blog_allowedthemes',
'_admin_notice_multisite_activate_plugins_page',
'add_blog_option',
'delete_blog_option',
'get_blogaddress_by_domain',
'get_blogaddress_by_id',
'get_blogaddress_by_name',
'get_blog_details',
'get_blog_option',
'get_blog_status',
'get_id_from_blogname',
'get_last_updated',
'is_archived',
'refresh_blog_details',
'restore_current_blog',
'switch_to_blog',
'update_archived',
'update_blog_details',
'update_blog_option',
'update_blog_status',
'wpmu_update_blogs_date',
'ms_cookie_constants',
'ms_file_constants',
'ms_subdomain_constants',
'ms_upload_constants',
'add_existing_user_to_blog',
'add_new_user_to_blog',
'add_user_to_blog',
'check_upload_mimes',
'create_empty_blog',
'domain_exists',
'filter_SSL',
'fix_phpmailer_messageid',
'force_ssl_content',
'get_active_blog_for_user',
'get_admin_users_for_domain',
'get_blogs_of_user',
'get_blog_count',
'get_blog_id_from_url',
'get_blog_permalink',
'get_blog_post',
'get_current_site',
'get_dashboard_blog',
'get_dirsize',
'get_most_recent_post_of_user',
'get_sitestats',
'get_space_allowed',
'get_space_used',
'get_upload_space_available',
'get_user_count',
'get_user_id_from_string',
'global_terms',
'insert_blog',
'install_blog',
'install_blog_defaults',
'is_blog_user',
'is_email_address_unsafe',
'is_upload_space_available',
'is_user_option_local',
'is_user_spammy',
'maybe_add_existing_user_to_blog',
'maybe_redirect_404',
'newblog_notify_siteadmin',
'newuser_notify_siteadmin',
'recurse_dirsize',
'redirect_this_site',
'remove_user_from_blog',
'signup_nonce_check',
'signup_nonce_fields',
'update_blog_public',
'update_posts_count',
'upload_is_file_too_big',
'upload_is_user_over_quota',
'upload_size_limit_filter',
'users_can_register_signup_filter',
'welcome_user_msg_filter',
'wp_get_sites',
'wpmu_activate_signup',
'wpmu_create_blog',
'wpmu_create_user',
'wpmu_log_new_registrations',
'wpmu_signup_blog',
'wpmu_signup_blog_notification',
'wpmu_signup_user',
'wpmu_signup_user_notification',
'wpmu_validate_blog_signup',
'wpmu_validate_user_signup',
'wpmu_welcome_notification',
'wpmu_welcome_user_notification',
'get_current_site_name',
'is_subdomain_install',
'ms_not_installed',
'ms_site_check',
'wpmu_current_site',
'has_nav_menu',
'is_home',
'is_front_page',
'comments_open',
'is_404',
'is_admin',
'is_archive',
'is_author',
'is_paged',
'is_date',
'is_day',
'is_month',
'is_page_template',
'is_feed',
'is_preview',
'is_customize_preview',
'is_search',
'is_singular',
'is_tax',
'is_time',
'is_year',
'pings_open',
'gravity_form', // shouldn't be here...
'single_post_title',
);
/**
* Clarkson_Core\Twig_Extension constructor.
*
* @param array $functions WordPress functions.
*/
public function __construct( array $functions = array() ) {
if ( $functions ) {
$this->allowFunctions( $functions );
}
}
/**
* Get the Twig functions.
*
* @return \Twig\TwigFunction[] $twig_functions Twig functions.
* @internal
*/
public function getFunctions() {
$twig_functions = array();
/**
* Adds custom functions to be available in a twig context.
*
* @hook clarkson_twig_functions
* @since 0.1.0
* @param {string[]} $functions Functions to be made available in twig.
* @return {string[]} Functions available in twig.
* @see https://twig.symfony.com/doc/2.x/advanced.html#id2
*
* @example
* // Make function from pagenavi plugin to available in twig.
* add_filter( 'clarkson_twig_functions', function( $functions ) {
* $functions[] = 'wp_pagenavi';
* return $functions;
* } );
*/
$allowed_functions = apply_filters( 'clarkson_twig_functions', $this->functions );
foreach ( $allowed_functions as $function ) {
$twig_functions[] = new \Twig\TwigFunction( $function, $function );
}
return $twig_functions;
}
/**
* Add an allowed function to Twig function.
*
* @param string $function Twig function name.
* @return void
*/
public function allowFunction( $function ) {
$this->functions[] = $function;
}
/**
* Set allowd functions allowed in Twig.
*
* @param array $functions Allowed Twig functions.
* @return void
*/
public function allowFunctions( array $functions ) {
$this->functions = $functions;
}
/**
* Get the string 'php_function'.
*
* @return string 'php_function'.
* @internal
*/
public function getName() {
return 'php_function';
}
}