diff --git a/.gitignore b/.gitignore index d634f5e..a57cfb3 100644 --- a/.gitignore +++ b/.gitignore @@ -2,5 +2,5 @@ .idea/ workspace.xml modules.xml - +sftp-config.json /vendor/ diff --git a/includes/functions/core-functions.php b/includes/functions/core-functions.php index c00eaa2..1abf286 100644 --- a/includes/functions/core-functions.php +++ b/includes/functions/core-functions.php @@ -476,7 +476,11 @@ function better_amp_guess_none_amp_url( $args = array() ) { if ( ! better_amp_using_permalink_structure() ) { - return home_url( remove_query_arg( 'amp' ) ); + $no_permalink_desktop_url = home_url( remove_query_arg( 'amp' )); + + $no_permalink_desktop_url = apply_filters('better-amp/includes/no-permalink-desktop-url',$no_permalink_desktop_url); + + return $no_permalink_desktop_url; } $current_url = better_amp_get_canonical_url(); @@ -489,6 +493,7 @@ function better_amp_guess_none_amp_url( $args = array() ) { } } + $none_amp_url = apply_filters('better-amp/includes/none-amp-url',$none_amp_url); return $none_amp_url; } diff --git a/includes/functions/theme-functions.php b/includes/functions/theme-functions.php index 708f7fd..bbb3182 100644 --- a/includes/functions/theme-functions.php +++ b/includes/functions/theme-functions.php @@ -1,3160 +1,3161 @@ - - * @copyright Copyright (c) 2016, BetterStudio - */ - -// Used to save all template properties -$GLOBALS['better_amp_theme_core_props_cache'] = array(); - -// Used to save globals variables -$GLOBALS['better_amp_theme_core_globals_cache'] = array(); - -// Used to save template query -$GLOBALS['better_amp_theme_core_query'] = null; - -if ( ! function_exists( 'better_amp_locate_template' ) ) { - /** - * Retrieve the name of the highest priority amp template file that exists. - * - * @param string|array $template_names Template file(s) to search for, in order. - * @param bool $load If true the template file will be loaded if it is found. - * @param bool $require_once Whether to require_once or require. Default true. Has no effect if $load is false. - * - * @since 1.0.0 - * - * @return string The template filename if one is located. - * @see locate_template for more doc - * - */ - function better_amp_locate_template( $template_names, $load = false, $require_once = true ) { - - $wp_theme_can_override = current_theme_supports( 'better-amp-template' ); - - /** - * Scan WordPress theme directory at first, if override feature was enabled - */ - if ( $wp_theme_can_override ) { - $scan_directories = array( - STYLESHEETPATH . '/' . BETTER_AMP_OVERRIDE_TPL_DIR . '/', - TEMPLATEPATH . '/' . BETTER_AMP_OVERRIDE_TPL_DIR . '/', - better_amp_get_template_directory() - ); - } else { - $scan_directories = array( - better_amp_get_template_directory(), - STYLESHEETPATH . '/' . BETTER_AMP_OVERRIDE_TPL_DIR . '/', - TEMPLATEPATH . '/' . BETTER_AMP_OVERRIDE_TPL_DIR . '/', - ); - } - - $scan_directories = array_unique( array_filter( $scan_directories ) ); - - foreach ( $scan_directories as $theme_directory ) { - if ( $theme_file_path = better_amp_load_templates( $template_names, $theme_directory, $load, $require_once ) ) { - return $theme_file_path; - } - } - - // fallback: scan into theme-compat folder - return better_amp_load_templates( $template_names, BETTER_AMP_TPL_COMPAT_ABSPATH, $load, $require_once ); - } -} - -if ( ! function_exists( 'better_amp_load_templates' ) ) { - /** - * Require the template file - * - * @param string|array $templates - * @param string $theme_directory base directory. scan $templates files into this directory - * @param bool $load - * @param bool $require_once - * - * @since 1.0.0 - * - * @return bool|string - * @see better_amp_locate_template for parameters documentation - * - */ - function better_amp_load_templates( $templates, $theme_directory, $load = false, $require_once = true ) { - - foreach ( (array) $templates as $theme_file ) { - - $theme_file = ltrim( $theme_file, '/' ); - $theme_directory = trailingslashit( $theme_directory ); - - if ( file_exists( $theme_directory . $theme_file ) ) { - - if ( $load ) { - if ( $require_once ) { - require_once $theme_directory . $theme_file; - } else { - require $theme_directory . $theme_file; - } - } - - return $theme_directory . $theme_file; - } - } - - return false; - } -} - - -if ( ! function_exists( 'better_amp_get_view' ) ) { - /** - * Used to print view/partials. - * - * todo needs test - * - * @param string $folder Folder name - * @param string $file File name - * @param string $style Style - * @param bool $echo Echo the result or not - * - * @since 1.0.0 - * - * @return null|string - */ - function better_amp_get_view( $folder, $file = '', $style = '', $echo = true ) { - - // If file name passed as folder argument for short method call - if ( ! empty( $folder ) && empty( $file ) ) { - $file = $folder; - $folder = ''; - } - - $templates = array(); - - // File is inside another folder - if ( ! empty( $folder ) ) { - - $templates[] = $folder . '/' . $file . '.php'; - - } // File is inside style base folder - else { - - $templates[] = $file . '.php'; - - } - - $template = better_amp_locate_template( $templates, false, false ); - - if ( $echo == false ) { - ob_start(); - } - - if ( ! empty( $template ) ) { - include $template; - } - - if ( $echo == false ) { - return ob_get_clean(); - } - - } // better_amp_get_view -} - - -// -// -// Blocks properties -// -// - -if ( ! function_exists( 'better_amp_get_prop' ) ) { - /** - * Used to get a property value. - * - * @param string $id - * @param mixed $default - * - * @since 1.0.0 - * - * @return mixed - */ - function better_amp_get_prop( $id, $default = null ) { - - global $better_amp_theme_core_props_cache; - - if ( isset( $better_amp_theme_core_props_cache[ $id ] ) ) { - return $better_amp_theme_core_props_cache[ $id ]; - } else { - return $default; - } - } -} - - -if ( ! function_exists( 'better_amp_echo_prop' ) ) { - /** - * Used to print a property value. - * - * @param string $id - * @param mixed $default - * - * @since 1.0.0 - * - * @return mixed - */ - function better_amp_echo_prop( $id, $default = null ) { - - global $better_amp_theme_core_props_cache; - - if ( isset( $better_amp_theme_core_props_cache[ $id ] ) ) { - echo $better_amp_theme_core_props_cache[ $id ]; // escaped before - } else { - echo $default; // escaped before - } - } -} - - -if ( ! function_exists( 'better_amp_get_prop_class' ) ) { - /** - * Used to get block class property. - * - * @since 1.0.0 - * - * @return string - */ - function better_amp_get_prop_class() { - - global $better_amp_theme_core_props_cache; - - if ( isset( $better_amp_theme_core_props_cache['class'] ) ) { - return $better_amp_theme_core_props_cache['class']; - } else { - return ''; - } - } -} - - -if ( ! function_exists( 'better_amp_get_prop_thumbnail_size' ) ) { - /** - * Used to get block thumbnail size property. - * - * @param string $default - * - * @since 1.0.0 - * - * @return string - */ - function better_amp_get_prop_thumbnail_size( $default = 'thumbnail' ) { - - global $better_amp_theme_core_props_cache; - - if ( isset( $better_amp_theme_core_props_cache['thumbnail-size'] ) ) { - return $better_amp_theme_core_props_cache['thumbnail-size']; - } else { - return $default; - } - } -} - - -if ( ! function_exists( 'better_amp_set_prop' ) ) { - /** - * Used to set a block property value. - * - * @param string $id - * @param mixed $value - * - * @since 1.0.0 - * - * @return mixed - */ - function better_amp_set_prop( $id, $value ) { - - global $better_amp_theme_core_props_cache; - - $better_amp_theme_core_props_cache[ $id ] = $value; - } -} - - -if ( ! function_exists( 'better_amp_set_prop_class' ) ) { - /** - * Used to set a block class property value. - * - * @param mixed $value - * @param bool $clean - * - * @since 1.0.0 - * - * @return mixed - */ - function better_amp_set_prop_class( $value, $clean = false ) { - - global $better_amp_theme_core_props_cache; - - if ( $clean ) { - $better_amp_theme_core_props_cache['class'] = $value; - } else { - $better_amp_theme_core_props_cache['class'] = $value . ' ' . better_amp_get_prop_class(); - } - } -} - - -if ( ! function_exists( 'better_amp_set_prop_thumbnail_size' ) ) { - /** - * Used to set a block property value. - * - * @param mixed $value - * - * @since 1.0.0 - * - * @return mixed - */ - function better_amp_set_prop_thumbnail_size( $value = 'thumbnail' ) { - - global $better_amp_theme_core_props_cache; - - $better_amp_theme_core_props_cache['thumbnail-size'] = $value; - } -} - - -if ( ! function_exists( 'better_amp_unset_prop' ) ) { - /** - * Used to remove a property from block property list. - * - * @param string $id - * - * @since 1.0.0 - * - * @return mixed - */ - function better_amp_unset_prop( $id ) { - - global $better_amp_theme_core_props_cache; - - unset( $better_amp_theme_core_props_cache[ $id ] ); - } -} - - -if ( ! function_exists( 'better_amp_clear_props' ) ) { - /** - * Used to clear all properties. - * - * @since 1.0.0 - * - * @return void - */ - function better_amp_clear_props() { - - global $better_amp_theme_core_props_cache; - - $better_amp_theme_core_props_cache = array(); - } -} - - -// -// -// Global Variables -// -// - - -if ( ! function_exists( 'better_amp_set_global' ) ) { - /** - * Used to set a global variable. - * - * @param string $id - * @param mixed $value - * - * @since 1.0.0 - * - * @return mixed - */ - function better_amp_set_global( $id, $value ) { - - global $better_amp_theme_core_globals_cache; - - $better_amp_theme_core_globals_cache[ $id ] = $value; - } -} - - -if ( ! function_exists( 'better_amp_unset_global' ) ) { - /** - * Used to remove a global variable. - * - * @param string $id - * - * @since 1.0.0 - * - * @return mixed - */ - function better_amp_unset_global( $id ) { - - global $better_amp_theme_core_globals_cache; - - unset( $better_amp_theme_core_globals_cache[ $id ] ); - } -} - - -if ( ! function_exists( 'better_amp_get_global' ) ) { - /** - * Used to get a global value. - * - * @param string $id - * @param mixed $default - * - * @since 1.0.0 - * - * @return mixed - */ - function better_amp_get_global( $id, $default = null ) { - - global $better_amp_theme_core_globals_cache; - - if ( isset( $better_amp_theme_core_globals_cache[ $id ] ) ) { - return $better_amp_theme_core_globals_cache[ $id ]; - } else { - return $default; - } - } -} - - -if ( ! function_exists( 'better_amp_echo_global' ) ) { - /** - * Used to print a global value. - * - * @param string $id - * @param mixed $default - * - * @since 1.0.0 - * - * @return mixed - */ - function better_amp_echo_global( $id, $default = null ) { - - global $better_amp_theme_core_globals_cache; - - if ( isset( $better_amp_theme_core_globals_cache[ $id ] ) ) { - echo $better_amp_theme_core_globals_cache[ $id ]; // escaped before - } else { - echo $default; // escaped before - } - } -} - - -if ( ! function_exists( 'better_amp_clear_globals' ) ) { - /** - * Used to clear all properties. - * - * @since 1.0.0 - * - * @return void - */ - function better_amp_clear_globals() { - - global $better_amp_theme_core_globals_cache; - - $better_amp_theme_core_globals_cache = array(); - } -} - - -// -// -// Queries -// -// - -if ( ! function_exists( 'better_amp_get_query' ) ) { - /** - * Used to get current query. - * - * @since 1.0.0 - * - * @return WP_Query|null - */ - function better_amp_get_query() { - - global $better_amp_theme_core_query; - - if ( ! is_a( $better_amp_theme_core_query, 'WP_Query' ) ) { - global $wp_query; - - $better_amp_theme_core_query = &$wp_query; - } - - return $better_amp_theme_core_query; - } -} - - -if ( ! function_exists( 'better_amp_set_query' ) ) { - /** - * Used to get current query. - * - * @param WP_Query $query - * - * @since 1.0.0 - * - */ - function better_amp_set_query( &$query ) { - - global $better_amp_theme_core_query; - - $better_amp_theme_core_query = $query; - } -} - - -if ( ! function_exists( 'better_amp_clear_query' ) ) { - /** - * Used to get current query. - * - * @param bool $reset_query - * - * @since 1.0.0 - * - */ - function better_amp_clear_query( $reset_query = true ) { - - global $better_amp_theme_core_query; - - $better_amp_theme_core_query = null; - - // This will remove obscure bugs that occur when the previous wp_query object is not destroyed properly before another is set up. - if ( $reset_query ) { - wp_reset_query(); - } - } -} - - -if ( ! function_exists( 'better_amp_have_posts' ) ) { - /** - * Used for checking have posts in advanced way! - * - * @since 1.0.0 - */ - function better_amp_have_posts() { - - // Add default query to better_template query if its not added or default query is used. - if ( ! better_amp_get_query() instanceof WP_Query ) { - global $wp_query; - - better_amp_set_query( $wp_query ); - } - - // If count customized - if ( better_amp_get_prop( 'posts-count', null ) != null ) { - if ( better_amp_get_prop( 'posts-counter', 1 ) > better_amp_get_prop( 'posts-count' ) ) { - return false; - } else { - if ( better_amp_get_query()->current_post + 1 < better_amp_get_query()->post_count ) { - return true; - } else { - return false; - } - } - } else { - return better_amp_get_query()->current_post + 1 < better_amp_get_query()->post_count; - } - } -} - - -if ( ! function_exists( 'better_amp_the_post' ) ) { - /** - * Custom the_post for custom counter functionality - * - * @since 1.0.0 - */ - function better_amp_the_post() { - - // If count customized - if ( better_amp_get_prop( 'posts-count', null ) != null ) { - better_amp_set_prop( 'posts-counter', absint( better_amp_get_prop( 'posts-counter', 1 ) ) + 1 ); - } - - // Do default the_post - better_amp_get_query()->the_post(); - } -} - - -if ( ! function_exists( 'better_amp_the_post_thumbnail' ) ) { - /** - * Display the post thumbnail. - * - * @param string $size - * @param string $attr - * - * @since 1.1.0 - * - */ - function better_amp_the_post_thumbnail( $size = 'post-thumbnail', $attr = '' ) { - - if ( empty( $attr ) ) { - $attr = array( - 'alt' => the_title_attribute( array( 'echo' => false ) ), - 'layout' => 'responsive', - ); - } - - the_post_thumbnail( $size, $attr ); - } -} - - -if ( ! function_exists( 'better_amp_is_main_query' ) ) { - /** - * Detects and returns that current query is main query or not? with support of better_{get|set}_query - * - * @since 1.0.0 - * - * @return WP_Query|null - */ - function better_amp_is_main_query() { - - global $better_amp_theme_core_query; - - // Add default query to better_template query if its not added or default query is used. - if ( ! is_a( $better_amp_theme_core_query, 'WP_Query' ) ) { - global $wp_query; - - return $wp_query->is_main_query(); - } - - return $better_amp_theme_core_query->is_main_query(); - } -} - - -if ( ! function_exists( 'better_amp_head' ) ) { - /** - * Fire the better_amp_head action. - * - * @since 1.0.0 - */ - function better_amp_head() { - - do_action( 'better-amp/template/head' ); - } -} - - -if ( ! function_exists( 'better_amp_footer' ) ) { - /** - * Fire the better_amp_footer action. - * - * @since 1.0.0 - */ - function better_amp_footer() { - - do_action( 'better-amp/template/footer' ); - } -} - - -if ( ! function_exists( 'better_amp_body_class' ) ) { - /** - * Display the classes for the body element. - * - * @param string|array $class One or more classes to add to the class list. - * - * @since 1.0.0 - */ - function better_amp_body_class( $class = '' ) { - - echo 'class="' . join( ' ', get_body_class( $class ) ) . '"'; - } -} - - -if ( ! function_exists( 'better_amp_get_header' ) ) { - /** - * Load footer template. - * - * @param string $name The name of the specialised header. - * - * @since 1.0.0 - */ - function better_amp_get_header( $name = null ) { - - $templates = array(); - - $name = (string) $name; - - if ( '' !== $name ) { - $templates[] = "header-{$name}.php"; - } - - $templates[] = 'header.php'; - - better_amp_locate_template( $templates, true ); - } -} - - -if ( ! function_exists( 'better_amp_get_footer' ) ) { - /** - * Load footer template. - * - * @param string $name Name of the specific footer file to use. - * - * @since 1.0.0 - */ - function better_amp_get_footer( $name = null ) { - - $templates = array(); - - $name = (string) $name; - - if ( '' !== $name ) { - $templates[] = "footer-{$name}.php"; - } - - $templates[] = 'footer.php'; - - better_amp_locate_template( $templates, true ); - } -} - - -if ( ! function_exists( 'better_amp_get_sidebar' ) ) { - /** - * Load sidebar template. - * - * @param string $name The name of the specialised sidebar. - * - * @since 1.0.0 - */ - function better_amp_get_sidebar( $name = null ) { - - $templates = array(); - - $name = (string) $name; - - if ( '' !== $name ) { - $templates[] = "sidebar-{$name}.php"; - } - - $templates[] = 'sidebar.php'; - - better_amp_locate_template( $templates, true ); - } -} - - -if ( ! function_exists( 'better_amp_get_template_info' ) ) { - /** - * Get active amp theme information - * - * array { - * - * @type string $Version Template Semantic Version Number {@link http://semver.org/} - * @type string $ScreenShot -optional: screenshot.png- Relative Path to ScreenShot. - * @type int|string $MaxWidth -optional:600- Maximum Template Container Width. - * @type string $TemplateRoot Absolute Path to Template Directory - * @type string $Description Template Description - * @type string $AuthorURI Template Author URL - * @type string $Author Template Author - * @type string $Name Template name - * @type string $ThemeURI Template URL - * } - * - * @since 1.0.0 - * - * @return array - */ - function better_amp_get_template_info() { - - return wp_parse_args( - apply_filters( 'better-amp/template/active-template', array() ), - array( - 'ScreenShot' => 'screenshot.png', - 'MaxWidth' => 780, - 'view' => 'general' - ) - ); - } -} - - -if ( ! function_exists( 'better_amp_get_template_directory' ) ) { - /** - * Get absolute path to active better-amp theme directory - * - * @since 1.0.0 - * - * @return string - */ - function better_amp_get_template_directory() { - - if ( $theme_info = better_amp_get_template_info() ) { - return $theme_info['TemplateRoot']; - } - - return ''; - } -} - - -if ( ! function_exists( 'better_amp_get_container_width' ) ) { - /** - * Get maximum container width - * - * @since 1.0.0 - * - * @return int - */ - function better_amp_get_container_width() { - - $info = better_amp_get_template_info(); - - return (int) $info['MaxWidth']; - } -} - - -if ( ! function_exists( 'better_amp_guess_height' ) ) { - /** - * Calculate height fits to width - * - * @since 1.0.0 - * - * @return int - */ - function better_amp_guess_height() { - - return better_amp_get_container_width() * 0.75; - } -} - - -if ( ! function_exists( 'better_amp_get_hw_attr' ) ) { - /** - * Get width & height attribute - * - * @param string $width Custom width - * @param string $height Custom height - * - * @since 1.0.0 - * - * @return string - */ - function better_amp_get_hw_attr( $width = '', $height = '' ) { - - $attr = ''; - - if ( empty( $width ) ) { - $width = better_amp_get_container_width(); - } - - if ( $width ) { - $attr .= 'width="' . intval( $width ) . '" '; - } - - if ( empty( $height ) ) { - $height = better_amp_guess_height(); - } - - if ( $height ) { - $attr .= 'height="' . intval( $height ) . '" '; - } - - return $attr; - } -} - - -if ( ! function_exists( 'better_amp_hw_attr' ) ) { - /** - * Get width & height attribute - * - * @param string $width - * @param string $height - * - * @since 1.0.0 - * - * @return int - */ - function better_amp_hw_attr( $width = '', $height = '' ) { - - echo better_amp_get_hw_attr( $width, $height ); - } -} - - -if ( ! function_exists( 'better_amp_get_comment_link' ) ) { - /** - * Returns Non-AMP comment link for AMP post - * - * @since 1.0.0 - * - * @return int - */ - function better_amp_get_comment_link() { - - $prev = Better_AMP_Content_Sanitizer::turn_url_transform_off_on( false ); - - $comments_url = get_permalink() . '#respond'; - - Better_AMP_Content_Sanitizer::turn_url_transform_off_on( $prev ); - - return $comments_url; - } -} - -if ( ! function_exists( 'better_amp_comment_reply_link' ) ) { - /** - * Retrieve the HTML content for reply to comment link. - * - * @param array $args @see comment_reply_link for documentation - * - * @since 1.5.0 - * @return void|false|string - */ - function better_amp_comment_reply_link( $args = array() ) { - - $current_value = Better_AMP_Content_Sanitizer::$enable_url_transform; - Better_AMP_Content_Sanitizer::$enable_url_transform = false; - - $result = comment_reply_link( $args ); - Better_AMP_Content_Sanitizer::$enable_url_transform = $current_value; - - return $result; - } -} - - -if ( ! function_exists( 'better_amp_comment_link' ) ) { - /** - * Non-AMP comment link for AMP post - * - * @since 1.0.0 - * - * @return int - */ - function better_amp_comment_link() { - - echo esc_attr( better_amp_get_comment_link() ); - } -} - -if ( ! function_exists( 'better_amp_rel_canonical_url' ) ) { - - /** - * Get rel=canonical tag url. - * - * @since 1.8.3 - * @return string - */ - function better_amp_rel_canonical_url() { - - $canonical_url = better_amp_get_canonical_url(); - - if ( ! $canonical_url ) { - $canonical_url = better_amp_site_url(); - } - - return Better_AMP_Content_Sanitizer::transform_to_none_amp_url( $canonical_url ); - } -} - -if ( ! function_exists( 'better_amp_print_rel_canonical' ) ) { - /** - * Print rel=canonical tag in AMP version - * - * @param bool $echo - * - * @since 1.0.0 - * @return string - */ - function better_amp_print_rel_canonical() { - - - if ( $canonical = better_amp_rel_canonical_url() ) { - ?> - - '', - 'bamp-skip-redirect' => '', - ) ); - - return sprintf( '%s://%s%s', $parse['scheme'], $parse['host'], add_query_arg( $valid_queries, $url ) ); - } -} - - -if ( ! function_exists( 'better_amp_print_rel_amphtml' ) ) { - /** - * Print rel=amphtml tag - * - * @since 1.0.0 - */ - function better_amp_print_rel_amphtml() { - - if ( ! Better_AMP::get_instance()->amp_version_exists() ) { - return; - } - - $page_url = better_amp_get_canonical_url(); - $canonical = Better_AMP_Content_Sanitizer::transform_to_amp_url( - $page_url - ); - - if ( $canonical !== $page_url ) { - ?> - - body{-webkit-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-moz-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-ms-animation:-amp-start 8s steps(1,end) 0s 1 normal both;animation:-amp-start 8s steps(1,end) 0s 1 normal both}@-webkit-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-moz-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-ms-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-o-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@keyframes -amp-start{from{visibility:hidden}to{visibility:visible}} -AMP_Boilerplate; - - } -} - - -if ( ! function_exists( 'better_amp_get_search_page_url' ) ) { - /** - * Get AMP index page url - * - * @param string $path Optional. Path relative to the site URL. Default empty. - * @param string $before_sp Custom string to append before amp start point. Default empty. - * @param bool $front_page_url Optional. see the following comment. - * - * @since 1.0.0 - * @return string - * @global array $better_amp_post_type_slugs list of custom post type rewrite slug @see better_amp_collect_post_type_slugs - * - */ - function better_amp_site_url( $path = '', $before_sp = '', $front_page_url = null ) { - - if ( $structure = better_amp_using_permalink_structure() ) { - - /** - * Do not append permalink structure prefix on custom post type urls because The prefix - * is just for default WordPress post type (post) and it can not stay before custom post type urls. - * - * @since 1.9.11 - */ - if ( $url_prefix = better_amp_permalink_prefix() ) { - - global $better_amp_post_type_slugs; - - // Grab all characters until first slash - $maybe_post_slug_slug = substr( $path, 0, strpos( $path, '/' ) ); - - if ( $better_amp_post_type_slugs && in_array( $maybe_post_slug_slug, $better_amp_post_type_slugs ) ) { // is it a custom post type single permalink ? - - $url_prefix = ''; - } - } - - if ( ! isset( $front_page_url ) ) { - $front_page_url = $path === ''; - } - - if ( ! empty( $path ) && $url_prefix && preg_match( '#^' . preg_quote( $url_prefix, '#' ) . '(.+)$#i', $path, $match ) ) { - - $path = $match[1]; - $before_sp = str_replace( $match[1], '', $match[0] ) . $before_sp; - } - - /** - * Prepend permalink structure prefix before amp cause 404 error in search page - * So we added $front_page_url parameter to bypass this functionality. - * - * @see better_amp_permalink_prefix - * @see better_amp_get_search_page_url - * - * @example when structure is /topics/%post_id%/%postname%/ and $front_page_url = false - * Then the search page will be /topics/amp/?s which cause 404 error - */ - $url = trailingslashit( home_url( $front_page_url ? '' : $url_prefix ) ); - $url .= $before_sp ? trailingslashit( $before_sp ) : ''; - $url .= Better_AMP::STARTPOINT; - - if ( $path ) { - - $url .= '/' . ltrim( $path, '/' ); - } - - } else { - - $url = add_query_arg( Better_AMP::STARTPOINT, true, home_url( $path ) ); - } - - return $url; - } -} - - -if ( ! function_exists( 'better_amp_do_shortcode' ) ) { - /** - * Do component shortcodes like wordpress: do_shortcode function - * - * @since 1.0.0 - * - * @return string Content with shortcodes filtered out - */ - function better_amp_do_shortcode() { - - static $registered; - - $args = func_get_args(); - - if ( ! $registered ) { - - Better_AMP::get_instance()->call_components_method( 'register_shortcodes' ); - - $registered = true; - } - - return call_user_func_array( 'do_shortcode', $args ); - } -} - - -if ( ! function_exists( 'better_amp_theme_set_menu_walker' ) ) { - /** - * Change menu walker only for main amp site navigation - * - * Walker of navigation menu with 'amp-sidebar-nav' theme_location going to change' Better_AMP_Menu_Walker'. - * - * - * @param array $args Array of wp_nav_menu() arguments. - * - * @since 1.0.0 - * @return array modified $args - * @see Better_AMP_Menu_Walker - * @see default-filters.php file - * - */ - function better_amp_theme_set_menu_walker( $args ) { - - if ( ! is_better_amp() | ! has_nav_menu( $args['theme_location'] ) ) { - return $args; - } - - if ( apply_filters( 'better-amp/template/set-menu-walker', $args['theme_location'] === 'amp-sidebar-nav', $args ) ) { - - add_theme_support( 'better-amp-navigation' ); - - $args['walker'] = new Better_AMP_Menu_Walker; - } - - return $args; - } -} - - -if ( ! function_exists( 'better_amp_enqueue_rtl_style' ) ) { - /** - * Print rtl.css content as inline css in RTL version if file exists - * - * @since 1.0.0 - */ - function better_amp_enqueue_rtl_style() { - - if ( ! is_rtl() ) { - return; - } - - $theme_info = better_amp_get_template_info(); - - $rtl_style = trailingslashit( $theme_info['TemplateRoot'] ) . 'rtl.css'; - - if ( file_exists( $rtl_style ) ) { - better_amp_enqueue_inline_style( $rtl_style, 'better-amp-rtl' ); - } - } -} - - -if ( ! function_exists( 'better_amp_direction' ) ) { - /** - * Handy function to print 'right' string on rtl mode and 'left' otherwise! - * - * * @param bool $reverse - * - * @since 1.0.0 - * - */ - function better_amp_direction( $reverse = false ) { - - if ( $reverse ) { - echo is_rtl() ? 'left' : 'right'; - } else { - echo is_rtl() ? 'right' : 'left'; - } - - } -} - - -if ( ! function_exists( 'better_amp_fix_customizer_statics' ) ) { - /** - * Fix for loading js/css static files in customize.php page - * - * @since 1.0.0 - */ - function better_amp_fix_customizer_statics() { - - if ( is_customize_preview() ) { - add_action( 'better-amp/template/head', 'wp_head', 1, 1 ); - add_action( 'better-amp/template/footer', 'wp_footer', 1, 1 ); - } - - } // better_amp_fix_customizer_statics -} - - -/** - * Better-AMP Template functions - * - * We used wordpress core functions and renamed some get_* functions to better_amp_* - * - * @link https://developer.wordpress.org/themes/basics/template-hierarchy/ - * @see wp-includes/template.php - * - * | Original Name | AMP Name | - * | ---------------------------------- | ------------------------------------------ | - * | get_embed_template | better_amp_embed_template | - * | get_404_template | better_amp_404_template | - * | get_search_template | better_amp_search_template | - * | get_front_page_template | better_amp_front_page_template | - * | get_home_template | better_amp_home_template | - * | get_post_type_archive_template | better_amp_post_type_archive_template | - * | get_taxonomy_template | better_amp_taxonomy_template | - * | get_attachment_template | better_amp_attachment_template | - * | get_single_template | better_amp_single_template | - * | get_page_template | better_amp_page_template | - * | get_singular_template | better_amp_singular_template | - * | get_category_template | better_amp_category_template | - * | get_tag_template | better_amp_tag_template | - * | get_author_template | better_amp_author_template | - * | get_date_template | better_amp_date_template | - * | get_archive_template | better_amp_archive_template | - * | get_paged_template | better_amp_paged_template | - * | get_archive_template | better_amp_archive_template | - * | get_index_template | better_amp_index_template | - * | get_template_part | better_amp_template_part | - */ - - -if ( ! function_exists( 'better_amp_embed_template' ) ) { - /** - * Retrieves an embed template path in the current or parent template. - * - * @since 1.0.0 - * - * @return string Full path to embed template file. - * @see get_embed_template - * - */ - function better_amp_embed_template() { - - $object = get_queried_object(); - - $templates = array(); - - if ( ! empty( $object->post_type ) ) { - - $post_format = get_post_format( $object ); - - if ( $post_format ) { - $templates[] = "embed-{$object->post_type}-{$post_format}.php"; - } - - $templates[] = "embed-{$object->post_type}.php"; - } - - $templates[] = "embed.php"; - - return better_amp_locate_template( $templates ); - } -} - - -if ( ! function_exists( 'better_amp_404_template' ) ) { - /** - * Retrieve path of 404 template in current or parent template. - * - * @since 1.0.0 - * - * @return string Full path to 404 template file. - * @see get_404_template() - * - */ - function better_amp_404_template() { - - return better_amp_locate_template( '404.php' ); - } -} - - -if ( ! function_exists( 'better_amp_search_template' ) ) { - /** - * Retrieve path of search template in current or parent template. - * - * @since 1.0.0 - * - * @return string Full path to search template file. - * @see get_search_template() - * - */ - function better_amp_search_template() { - - return better_amp_locate_template( 'search.php' ); - } -} - - -if ( ! function_exists( 'better_amp_front_page_template' ) ) { - /** - * Retrieve path of front-page template in current or parent template. - * - * @since 1.0.0 - * - * @return string Full path to front page template file. - * @see get_front_page_template() - * - */ - function better_amp_front_page_template() { - - return better_amp_locate_template( 'front-page.php' ); - } -} - -if ( ! function_exists( 'better_amp_static_home_page_template' ) ) { - /** - * Retrieve path of static homepage template in current or parent template. - * - * @since 1.2.4 - * @return string Full path to static home page template file. - */ - function better_amp_static_home_page_template() { - - if ( $template = better_amp_front_page_template() ): - elseif ( $template = better_amp_page_template() ): - elseif ( $template = better_amp_singular_template() ): - endif; - - return $template; - } -} - - -if ( ! function_exists( 'better_amp_home_template' ) ) { - /** - * Retrieve path of home template in current or parent template. - * - * @since 1.0.0 - * - * @return string Full path to home template file. - * @see get_home_template() - * - */ - function better_amp_home_template() { - - $templates = array( 'home.php', 'index.php' ); - - return better_amp_locate_template( $templates ); - } -} - - -if ( ! function_exists( 'better_amp_archive_template' ) ) { - /** - * Retrieve path of archive template in current or parent template. - * - * @since 1.0.0 - * - * @return string Full path to archive template file. - * @see get_archive_template() - * - */ - function better_amp_archive_template() { - - $post_types = array_filter( (array) get_query_var( 'post_type' ) ); - - $templates = array(); - - if ( count( $post_types ) == 1 ) { - $post_type = reset( $post_types ); - $templates[] = "archive-{$post_type}.php"; - } - - $templates[] = 'archive.php'; - - return better_amp_locate_template( $templates ); - } -} - - -if ( ! function_exists( 'better_amp_post_type_archive_template' ) ) { - /** - * Retrieve path of post type archive template in current or parent template. - * - * @since 1.0.0 - * - * @return string Full path to archive template file. - * @see better_amp_archive_template() - * @see get_post_type_archive_template() - * - */ - function better_amp_post_type_archive_template() { - - $post_type = get_query_var( 'post_type' ); - - if ( is_array( $post_type ) ) { - $post_type = reset( $post_type ); - } - - $obj = get_post_type_object( $post_type ); - - if ( ! $obj->has_archive ) { - return ''; - } - - return better_amp_archive_template(); - } -} - - -if ( ! function_exists( 'better_amp_taxonomy_template' ) ) { - /** - * Retrieve path of taxonomy template in current or parent template. - * - * @since 1.0.0 - * - * @return string Full path to taxonomy template file. - */ - function better_amp_taxonomy_template() { - - $term = get_queried_object(); - - $templates = array(); - - if ( ! empty( $term->slug ) ) { - $taxonomy = $term->taxonomy; - $templates[] = "taxonomy-$taxonomy-{$term->slug}.php"; - $templates[] = "taxonomy-$taxonomy.php"; - } - - $templates[] = 'taxonomy.php'; - - return better_amp_locate_template( $templates ); - } -} - - -if ( ! function_exists( 'better_amp_attachment_template' ) ) { - /** - * Retrieve path of attachment template in current or parent template. - * - * @since 1.0.0 - * - * @return string Full path to attachment template file. - * @global array $posts - * - */ - function better_amp_attachment_template() { - - $attachment = get_queried_object(); - - $templates = array(); - - if ( $attachment ) { - - if ( false !== strpos( $attachment->post_mime_type, '/' ) ) { - list( $type, $subtype ) = explode( '/', $attachment->post_mime_type ); - } else { - list( $type, $subtype ) = array( $attachment->post_mime_type, '' ); - } - - if ( ! empty( $subtype ) ) { - $templates[] = "{$type}-{$subtype}.php"; - $templates[] = "{$subtype}.php"; - } - $templates[] = "{$type}.php"; - - } - - $templates[] = 'attachment.php'; - - return better_amp_locate_template( $templates ); - } -} - - -if ( ! function_exists( 'better_amp_single_template' ) ) { - /** - * Retrieve path of single template in current or parent template. - * - * @since 1.0.0 - * - * @return string Full path to single template file. - */ - function better_amp_single_template() { - - $object = get_queried_object(); - - $templates = array(); - - if ( ! empty( $object->post_type ) ) { - $templates[] = "single-{$object->post_type}-{$object->post_name}.php"; - $templates[] = "single-{$object->post_type}.php"; - } - - $templates[] = "single.php"; - - return better_amp_locate_template( $templates ); - } -} - - -if ( ! function_exists( 'better_amp_page_template' ) ) { - /** - * Retrieve path of page template in current or parent template. - * - * @since 1.0.0 - * - * @return string Full path to page template file. - * @see get_page_template() - * - */ - function better_amp_page_template() { - - $id = get_queried_object_id(); - $template = get_page_template_slug(); - $pagename = get_query_var( 'pagename' ); - - if ( ! $pagename && $id ) { - - // If a static page is set as the front page, $pagename will not be set. Retrieve it from the queried object - $post = get_queried_object(); - - if ( $post ) { - $pagename = $post->post_name; - } - - } - - $templates = array(); - - if ( $template && 0 === validate_file( $template ) ) { - $templates[] = $template; - } - - if ( $pagename ) { - $templates[] = "page-$pagename.php"; - } - - if ( $id ) { - $templates[] = "page-$id.php"; - } - - $templates[] = 'page.php'; - - return better_amp_locate_template( $templates ); - } -} - - -if ( ! function_exists( 'better_amp_singular_template' ) ) { - /** - * Retrieves the path of the singular template in current or parent template. - * - * @since 1.0.0 - * - * @return string Full path to singular template file - */ - function better_amp_singular_template() { - - return better_amp_locate_template( 'singular.php' ); - } -} - - -if ( ! function_exists( 'better_amp_category_template' ) ) { - /** - * Retrieve path of category template in current or parent template. - * - * @since 1.0.0 - * - * @return string Full path to category template file. - */ - function better_amp_category_template() { - - $category = get_queried_object(); - - $templates = array(); - - if ( ! empty( $category->slug ) ) { - $templates[] = "category-{$category->slug}.php"; - $templates[] = "category-{$category->term_id}.php"; - } - - $templates[] = 'category.php'; - - return better_amp_locate_template( $templates ); - } -} - - -if ( ! function_exists( 'better_amp_tag_template' ) ) { - /** - * Retrieve path of tag template in current or parent template. - * - * @since 1.0.0 - * - * @return string Full path to tag template file. - * @see get_query_template() - * - */ - function better_amp_tag_template() { - - $tag = get_queried_object(); - - $templates = array(); - - if ( ! empty( $tag->slug ) ) { - $templates[] = "tag-{$tag->slug}.php"; - $templates[] = "tag-{$tag->term_id}.php"; - } - - $templates[] = 'tag.php'; - - return better_amp_locate_template( $templates ); - } -} - - -if ( ! function_exists( 'better_amp_author_template' ) ) { - - /** - * Retrieve path of author template in current or parent template. - * - * @since 1.0.0 - * - * @return string Full path to author template file. - */ - function better_amp_author_template() { - - $author = get_queried_object(); - - $templates = array(); - - if ( $author instanceof WP_User ) { - $templates[] = "author-{$author->user_nicename}.php"; - $templates[] = "author-{$author->ID}.php"; - } - - $templates[] = 'author.php'; - - return better_amp_locate_template( $templates ); - } -} - - -if ( ! function_exists( 'better_amp_date_template' ) ) { - /** - * Retrieve path of date template in current or parent template. - * - * @since 1.0.0 - * - * @return string Full path to date template file. - */ - function better_amp_date_template() { - - return better_amp_locate_template( 'date.php' ); - } -} - - -if ( ! function_exists( 'better_amp_paged_template' ) ) { - /** - * Retrieve path of paged template in current or parent template. - * - * @since 1.0.0 - * - * @return string Full path to paged template file. - */ - function better_amp_paged_template() { - - return better_amp_locate_template( 'paged.php' ); - } -} - - -if ( ! function_exists( 'better_amp_index_template' ) ) { - /** - * Retrieve path of index template in current or parent template. - * - * @since 1.0.0 - * - * @return string Full path to index template file. - */ - function better_amp_index_template() { - - return better_amp_locate_template( 'index.php' ); - } -} - - -if ( ! function_exists( 'better_amp_get_search_form' ) ) { - /** - * Retrieve path of search form in current or parent template. - * - * @since 1.0.0 - * - * @return string Full path to index template file. - */ - function better_amp_get_search_form() { - - add_theme_support( 'better-amp-form' ); - - return better_amp_locate_template( 'searchform.php', true ); - } -} - - -if ( ! function_exists( 'better_amp_template_part' ) ) { - /** - * Load a template part into a template - * - * @param string $slug The slug name for the generic template. - * @param string $name The name of the specialised template. - * - * @since 1.0.0 - * @see get_template_part for more documentation - * - */ - function better_amp_template_part( $slug, $name = null ) { - - $templates = array(); - $name = (string) $name; - if ( '' !== $name ) { - $templates[] = "{$slug}-{$name}.php"; - } - - $templates[] = "{$slug}.php"; - - better_amp_locate_template( $templates, true, false ); - } -} - - -if ( ! function_exists( 'better_amp_get_search_page_url' ) ) { - /** - * Get search page url - * - * @since 1.0.0 - * - * @return string - */ - function better_amp_get_search_page_url() { - - /** - * The s query var must always add to AMP front-page url. for more information see the following function. - * - * @see better_amp_site_url - */ - $front_page_url = true; - - return esc_url( add_query_arg( 's', '', better_amp_site_url( '', '', $front_page_url ) ) ); - } -} - - -if ( ! function_exists( 'better_amp_get_thumbnail' ) ) { - /** - * Used to get thumbnail image for posts with support of default thumbnail image - * - * @param string $thumbnail_size - * @param null $post_id - * - * @since 1.0.0 - * - * @return string - */ - function better_amp_get_thumbnail( $thumbnail_size = 'thumbnail', $post_id = null ) { - - if ( is_null( $post_id ) ) { - $post_id = get_the_ID(); - } - - $thumbnail_id = get_post_thumbnail_id( $post_id ); - - $img = wp_get_attachment_image_src( $thumbnail_id, $thumbnail_size ); - - if ( $img ) { - return array( - 'src' => $img[0], - 'width' => $img[1], - 'height' => $img[2], - ); - } - - $img = array( - 'src' => '', - 'width' => '', - 'height' => '', - ); - - // todo add default thumbnail functionality or extension here - - return $img; - - } // better_amp_get_thumbnail -} // if - - -if ( ! function_exists( 'better_amp_element_uni_id' ) ) { - /** - * Create unique id for element - * - * @since 1.0.0 - * - * @return string - */ - function better_amp_element_uni_id() { - - return uniqid( 'element-' . rand() . '-' ); - } -} - - -if ( ! function_exists( 'better_amp_get_branding_info' ) ) { - /** - * Returns site branding info - * - * @param string $position - * - * @since 1.0.0 - * - * @return array - */ - function better_amp_get_branding_info( $position = 'header' ) { - - if ( $info = better_amp_get_global( $position . '-site-info', false ) ) { - return $info; - } else { - $info = array( - 'logo' => '', - 'logo-tag' => '', - 'sidebar-logo' => '', - 'sidebar-logo-tag' => '', - 'footer-logo' => '', - 'footer-logo-tag' => '', - 'name' => get_bloginfo( 'name', 'display' ), - 'description' => get_bloginfo( 'description', 'display' ), - ); - } - - if ( $name = better_amp_get_option( 'better-amp-' . $position . '-logo-text', false ) ) { - $info['name'] = $name; - } - - if ( $logo = better_amp_get_option( 'better-amp-' . $position . '-logo-img' ) ) { - - $logo = wp_get_attachment_image_src( $logo, 'full' ); - - if ( $logo ) { - $logo = array( - 'src' => $logo[0], - 'width' => $logo[1], - 'height' => $logo[2], - ); - } - - if ( ! empty( $logo['src'] ) ) { - $info['logo'] = $logo; - $info['logo']['alt'] = $info['name'] . ' - ' . $info['description']; - - $info['logo-tag'] = better_amp_create_image( $info['logo'], false ); - } - } - - - better_amp_set_global( $position . '-site-info', $info ); - - return $info; - } -} - - -if ( ! function_exists( 'better_amp_get_option' ) ) { - /** - * Returns option value - * - * @param string $option_key - * @param string $default_value - * - * @since 1.0.0 - * - * @return string - */ - function better_amp_get_option( $option_key = '', $default_value = null ) { - - if ( empty( $option_key ) ) { - return $default_value; - } - - if ( is_null( $default_value ) ) { - $default_value = apply_filters( 'better-amp/template/default-theme-mod', $default_value, $option_key ); - } - - return get_theme_mod( $option_key, $default_value ); - } -} - - -if ( ! function_exists( 'better_amp_get_theme_mod' ) ) { - /** - * Returns saved value of option or default from config - * - * @param $name - * @param bool $check_customize_preview - * - * @since 1.0. - * - * @return bool|string - * @todo remove this function and use better_amp_get_option instead - */ - function better_amp_get_theme_mod( $name, $check_customize_preview = true ) { - - $result = get_theme_mod( $name, better_amp_get_default_theme_setting( $name ) ); - - if ( ! $result && $check_customize_preview ) { - $result = better_amp_is_customize_preview(); - } - - return $result; - } -} - -if ( ! function_exists( 'better_amp_get_server_ip_address' ) ) { - /** - * Handy function for get server ip - * - * @since 1.0.0 - * - * @return string|null ip address on success or null on failure. - */ - function better_amp_get_server_ip_address() { - - // This function is fork of "bf_get_server_ip_address" function and it's better to use - // the main function if that was available. (IF BetterFramework was available) - if ( function_exists( 'bf_get_server_ip_address' ) ) { - return bf_get_server_ip_address(); - } - - global $is_IIS; - - if ( $is_IIS && isset( $_SERVER['LOCAL_ADDR'] ) ) { - $ip = $_SERVER['LOCAL_ADDR']; - } else { - $ip = $_SERVER['SERVER_ADDR']; - } - - //if ( $ip === '::1' || filter_var( $ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE ) !== FALSE ) { - if ( $ip === '::1' || filter_var( $ip, FILTER_VALIDATE_IP ) !== false ) { - return $ip; - } - } -} - - -if ( ! function_exists( 'better_amp_is_localhost' ) ) { - /** - * Utility function to detect is site currently running on localhost? - * - * @since 1.0.0 - * - * @return bool - */ - function better_amp_is_localhost() { - - // This function is fork of "bf_is_localhost" function and it's better to use - // the main function if that was available. (IF BetterFramework was available) - if ( function_exists( 'bf_is_localhost' ) ) { - return bf_is_localhost(); - } - - $server_ip = better_amp_get_server_ip_address(); - $server_ip_long = ip2long( $server_ip ); - - return $server_ip === '::1' || ( $server_ip_long >= 2130706433 && $server_ip_long <= 2147483646 ); - } -} - - -if ( ! function_exists( 'better_amp_human_number_format' ) ) { - /** - * Format number to human friendly style - * - * @param $number - * - * @since 1.0.0 - * - * @return string - */ - function better_amp_human_number_format( $number ) { - - if ( ! is_numeric( $number ) ) { - return $number; - } - - if ( $number >= 1000000 ) { - return round( ( $number / 1000 ) / 1000, 1 ) . "M"; - } elseif ( $number >= 100000 ) { - return round( $number / 1000, 0 ) . "k"; - } else { - return @number_format( $number ); - } - - } -} - - -if ( ! function_exists( 'better_amp_get_archive_title_fields' ) ) { - /** - * Handy function used to get archive pages title fields - * - * @since 1.0.0 - * - * @return array - */ - function better_amp_get_archive_title_fields() { - - $icon = ''; - $pre_title = ''; - $title = ''; - $description = ''; - - if ( function_exists( 'is_woocommerce' ) && is_woocommerce() ) { - - if ( is_product_category() ) { - - $icon = ''; - $pre_title = better_amp_translation_get( 'browsing_product_category' ); - $title = single_term_title( '', false ); - $description = term_description( get_queried_object() ); - - } elseif ( is_product_tag() ) { - - $icon = ''; - $pre_title = better_amp_translation_get( 'browsing_product_tag' ); - $title = single_term_title( '', false ); - $description = term_description( get_queried_object() ); - - } else { - - $icon = ''; - $pre_title = better_amp_translation_get( 'browsing' ); - $title = better_amp_translation_get( 'product-shop' ); - } - - } elseif ( is_category() ) { - - $icon = ''; - $pre_title = better_amp_translation_get( 'browsing_category' ); - $title = single_cat_title( '', false ); - $description = category_description(); - - } elseif ( is_tag() ) { - - $icon = ''; - $pre_title = better_amp_translation_get( 'browsing_tag' ); - $title = single_tag_title( '', false ); - $description = tag_description(); - - } elseif ( is_author() ) { - - $icon = ''; - $pre_title = better_amp_translation_get( 'browsing_author' ); - $title = '' . get_the_author() . ''; - $description = get_the_author_meta( 'description' ); - - } elseif ( is_year() ) { - - $icon = ''; - $pre_title = better_amp_translation_get( 'browsing_yearly' ); - $title = get_the_date( _x( 'Y', 'yearly archives date format', 'better-amp' ) ); - - } elseif ( is_month() ) { - - $icon = ''; - $pre_title = better_amp_translation_get( 'browsing_monthly' ); - $title = get_the_date( _x( 'F Y', 'monthly archives date format', 'better-amp' ) ); - - } elseif ( is_day() ) { - - $icon = ''; - $pre_title = better_amp_translation_get( 'browsing_daily' ); - $title = get_the_date( _x( 'F j, Y', 'daily archives date format', 'better-amp' ) ); - - } elseif ( is_tax( 'post_format' ) ) { - - if ( is_tax( 'post_format', 'post-format-aside' ) ) { - - $icon = ''; - $pre_title = better_amp_translation_get( 'browsing_archive' ); - $title = better_amp_translation_get( 'asides' ); - - } elseif ( is_tax( 'post_format', 'post-format-gallery' ) ) { - - $icon = ''; - $pre_title = better_amp_translation_get( 'browsing_archive' ); - $title = better_amp_translation_get( 'galleries' ); - - } elseif ( is_tax( 'post_format', 'post-format-image' ) ) { - - $icon = ''; - $pre_title = better_amp_translation_get( 'browsing_archive' ); - $title = better_amp_translation_get( 'images' ); - - } elseif ( is_tax( 'post_format', 'post-format-video' ) ) { - - $icon = ''; - $pre_title = better_amp_translation_get( 'browsing_archive' ); - $title = better_amp_translation_get( 'videos' ); - - } elseif ( is_tax( 'post_format', 'post-format-quote' ) ) { - - $icon = ''; - $pre_title = better_amp_translation_get( 'browsing_archive' ); - $title = better_amp_translation_get( 'quotes' ); - - } elseif ( is_tax( 'post_format', 'post-format-link' ) ) { - - $icon = ''; - $pre_title = better_amp_translation_get( 'browsing_archive' ); - $title = better_amp_translation_get( 'links' ); - - } elseif ( is_tax( 'post_format', 'post-format-status' ) ) { - - $icon = ''; - $pre_title = better_amp_translation_get( 'browsing_archive' ); - $title = better_amp_translation_get( 'statuses' ); - - } elseif ( is_tax( 'post_format', 'post-format-audio' ) ) { - - $icon = ''; - $pre_title = better_amp_translation_get( 'browsing_archive' ); - $title = better_amp_translation_get( 'audio' ); - - } elseif ( is_tax( 'post_format', 'post-format-chat' ) ) { - - $icon = ''; - $pre_title = better_amp_translation_get( 'browsing_archive' ); - $title = better_amp_translation_get( 'chats' ); - } - - } elseif ( is_post_type_archive() ) { - - $icon = ''; - $pre_title = better_amp_translation_get( 'browsing_archive' ); - $title = post_type_archive_title( '', false ); - $description = function_exists( 'get_the_post_type_description' ) ? - get_the_post_type_description() : ''; - } elseif ( is_tax() ) { - - $tax = get_taxonomy( get_queried_object()->taxonomy ); - $icon = ''; - $pre_title = better_amp_translation_get( 'browsing_archive' ); - $title = sprintf( __( '%1$s: %2$s', 'beetter-amp' ), $tax->labels->singular_name, single_term_title( '', false ) ); - $description = term_description(); - - } else { - - $icon = ''; - $pre_title = better_amp_translation_get( 'browsing' ); - $title = better_amp_translation_get( 'archive' ); - } - - return compact( 'icon', 'pre_title', 'title', 'description' ); - } -} - - -if ( ! function_exists( 'better_amp_post_classes' ) ) { - /** - * Handy function to generate class attribute for posts - * - * @param string|array $append One or more classes to add to the class list. - * - * @since 1.0.0 - * - */ - function better_amp_post_classes( $append = '' ) { - - $class = get_post_class( $append ); - - if ( ! has_post_thumbnail() ) { - $class[] = 'no-thumbnail'; - } else { - $class[] = 'have-thumbnail'; - } - - $class[] = 'clearfx'; - - $class = str_replace( 'hentry', '', join( ' ', $class ) ); - - echo 'class="' . $class . '"'; - - unset( $class ); - } -} - - -if ( ! function_exists( 'better_amp_post_subtitle' ) ) { - /** - * Post subtitle. - * - * Supports - * "BetterStudio" Themes - * "WP Subtitle" plugin - * - * @since 1.0.0 - */ - function better_amp_post_subtitle() { - - if ( function_exists( 'publisher_the_subtitle' ) ) { - publisher_the_subtitle( '
', '
' ); - } elseif ( function_exists( 'the_subtitle' ) ) { - the_subtitle( '
', '
' ); - } - - } -} - - -if ( ! function_exists( 'better_amp_social_share_fetch_count' ) ) { - /** - * Fetches share count for URL - * - * @param $site_id - * @param $url - * - * @since 1.0.0 - * - * @return int - */ - function better_amp_social_share_fetch_count( $site_id, $url ) { - - // This function is fork of "bf_social_share_fetch_count" function and it's better to use - // the main function if that was available. (IF BetterFramework was available) - if ( function_exists( 'bf_social_share_fetch_count' ) ) { - return bf_social_share_fetch_count( $site_id, $url ); - } - - $count = 0; - $remote_args = array( - 'sslverify' => false - ); - - switch ( $site_id ) { - - case 'facebook': - $remote = wp_remote_get( 'http://graph.facebook.com/?fields=og_object{id},share&id=' . $url, $remote_args ); - - if ( ! is_wp_error( $remote ) ) { - - $response = json_decode( wp_remote_retrieve_body( $remote ), true ); - - if ( isset( $response['share']['share_count'] ) ) { - $count = $response['share']['share_count']; - } - - } - - - break; - - case 'twitter': - - $remote = wp_remote_get( 'http://public.newsharecounts.com/count.json?callback=&url=' . $url, $remote_args ); - - if ( ! is_wp_error( $remote ) ) { - - $response = json_decode( wp_remote_retrieve_body( $remote ), true ); - - if ( isset( $response['count'] ) ) { - $count = $response['count']; - } - - } - - break; - - case 'google_plus': - $post_data = '[{"method":"pos.plusones.get","id":"p","params":{"nolog":true,"id":"' . rawurldecode( $url ) . '","source":"widget","userId":"@viewer","groupId":"@self"},"jsonrpc":"2.0","key":"p","apiVersion":"v1"}]'; - - $remote = wp_remote_post( 'https://clients6.google.com/rpc', array( - 'body' => $post_data, - 'headers' => 'Content-type: application/json', - 'sslverify' => false, - ) ); - - if ( ! is_wp_error( $remote ) ) { - - $response = json_decode( wp_remote_retrieve_body( $remote ), true ); - - if ( isset( $response[0]['result']['metadata']['globalCounts']['count'] ) ) { - $count = $response[0]['result']['metadata']['globalCounts']['count']; - } - - } - - break; - - case 'pinterest': - $remote = wp_remote_get( 'http://api.pinterest.com/v1/urls/count.json?callback=CALLBACK&url=' . $url, $remote_args ); - - if ( ! is_wp_error( $remote ) ) { - - if ( preg_match( '/^\s*CALLBACK\s*\((.+)\)\s*$/', wp_remote_retrieve_body( $remote ), $match ) ) { - $response = json_decode( $match[1], true ); - - if ( isset( $response['count'] ) ) { - $count = $response['count']; - } - } - - } - - break; - - case 'linkedin': - $remote = wp_remote_get( 'https://www.linkedin.com/countserv/count/share?format=json&url=' . $url, $remote_args ); - - if ( ! is_wp_error( $remote ) ) { - - $response = json_decode( wp_remote_retrieve_body( $remote ), true ); - - if ( isset( $response['count'] ) ) { - $count = $response['count']; - } - - } - - break; - - case 'tumblr': - $remote = wp_remote_get( 'http://api.tumblr.com/v2/share/stats?url=' . $url, $remote_args ); - - if ( ! is_wp_error( $remote ) ) { - - $response = json_decode( wp_remote_retrieve_body( $remote ), true ); - - if ( isset( $response['response']['note_count'] ) ) { - $count = $response['response']['note_count']; - } - - } - - break; - - - case 'reddit': - $remote = wp_remote_get( 'http://www.reddit.com/api/info.json?url=' . $url, $remote_args ); - - if ( ! is_wp_error( $remote ) ) { - - $response = json_decode( $remote['body'], true ); - - if ( isset( $response['data']['children']['0']['data']['score'] ) ) { - $count = $response['data']['children']['0']['data']['score']; - } - - } - - break; - - case 'stumbleupon': - $remote = wp_remote_get( 'http://www.stumbleupon.com/services/1.01/badge.getinfo?url=' . $url, $remote_args ); - - if ( ! is_wp_error( $remote ) ) { - - $response = json_decode( $remote['body'], true ); - - if ( isset( $response['result']['views'] ) ) { - $count = $response['result']['views']; - } - - } - - - break; - - } - - return $count; - } // better_amp_social_share_fetch_count -} - - -if ( ! function_exists( 'better_amp_social_shares_count' ) ) { - /** - * Returns all social share count for post. - * - * @param $sites - * - * @since 1.0.0 - * - * @return array|mixed|void - */ - function better_amp_social_shares_count( $sites ) { - - // This function is fork of "bf_social_shares_count" function and it's better to use - // the main function if that was available. (IF BetterFramework was available) - if ( function_exists( 'bf_social_share_fetch_count' ) ) { - return bf_social_shares_count( $sites ); - } - - $sites = array_intersect_key( $sites, array( - // Valid sites - 'facebook' => '', - 'twitter' => '', - 'google_plus' => '', - 'pinterest' => '', - 'linkedin' => '', - 'tumblr' => '', - 'reddit' => '', - 'stumbleupon' => '', - ) ); - - // Disable social share in localhost - if ( better_amp_is_localhost() ) { - return array(); - } - - $post_id = get_queried_object_id(); - $expired = (int) get_post_meta( $post_id, 'bs_social_share_interval', true ); - $results = array(); - - $update_cache = false; - - if ( $expired < time() ) { - $update_cache = true; - } else { - - // get count from cache storage - foreach ( $sites as $site_id => $is_active ) { - if ( ! $is_active ) { - continue; - } - - $count_number = get_post_meta( $post_id, 'bs_social_share_' . $site_id, true ); - $update_cache = $count_number === ''; - - if ( $update_cache ) { - break; - } - - $results[ $site_id ] = $count_number; - } - } - - if ( $update_cache ) { // Update cache storage if needed - $current_page = better_amp_social_share_guss_current_page(); - - foreach ( $sites as $site_id => $is_active ) { - if ( ! $is_active ) { - continue; - } - - $count_number = better_amp_social_share_fetch_count( $site_id, $current_page['page_permalink'] ); - - update_post_meta( $post_id, 'bs_social_share_' . $site_id, $count_number ); - - $results[ $site_id ] = $count_number; - } - - /** - * - * This filter can be used to change share count time. - * - */ - $cache_time = apply_filters( 'bs-social-share/cache-time', MINUTE_IN_SECONDS * 120, $post_id ); - - update_post_meta( $post_id, 'bs_social_share_interval', time() + $cache_time ); - } - - return apply_filters( 'bs-social-share/shares-count', $results ); - } // better_amp_social_shares_count -} - - -if ( ! function_exists( 'better_amp_social_share_guss_current_page' ) ) { - /** - * Detects and returns current page info for social share - * - * @since 1.0.0 - * - * @return array - */ - function better_amp_social_share_guss_current_page() { - - $page_permalink = ''; - $need_short_link = better_amp_get_theme_mod( 'better-amp-post-social-share-link-format' ) === 'short'; - - if ( is_home() || is_front_page() ) { - $page_title = get_bloginfo( 'name' ); - } elseif ( is_single( get_the_ID() ) && ! ( is_front_page() ) ) { - $page_title = get_the_title(); - - if ( $need_short_link ) { - $page_permalink = wp_get_shortlink(); - } - - } elseif ( is_page() ) { - $page_title = get_the_title(); - - if ( $need_short_link ) { - $page_permalink = wp_get_shortlink(); - } - - } elseif ( is_category() || is_tag() || is_tax() ) { - $page_title = single_term_title( '', false ); - - if ( $need_short_link ) { - - $queried_object = get_queried_object(); - - if ( ! empty( $queried_object->taxonomy ) ) { - - if ( 'category' == $queried_object->taxonomy ) { - $page_permalink = "?cat=$queried_object->term_id"; - } else { - $tax = get_taxonomy( $queried_object->taxonomy ); - - if ( $tax->query_var ) { - $page_permalink = "?$tax->query_var=$queried_object->slug"; - } else { - $page_permalink = "?taxonomy=$queried_object->taxonomy&term=$queried_object->term_id"; - } - } - - $page_permalink = home_url( $page_permalink ); - } - } - - } else { - $page_title = get_bloginfo( 'name' ); - } - - if ( ! $page_permalink ) { - $page_permalink = better_amp_guess_none_amp_url(); - } - - return compact( 'page_title', 'page_permalink' ); - } -} - - -if ( ! function_exists( 'better_amp_social_share_get_li' ) ) { - /** - * Used for generating lis for social share list - * - * @param string $id - * @param bool $show_title - * @param int $count_label - * - * @since 1.0.0 - * - * @return string - */ - function better_amp_social_share_get_li( $id = '', $show_title = true, $count_label = 0 ) { - - if ( empty( $id ) ) { - return ''; - } - - static $initialized; - static $page_title; - static $page_permalink; - - wp_reset_postdata(); // fix for after other loops - - if ( is_null( $initialized ) ) { - $cur_page = better_amp_social_share_guss_current_page(); - $page_title = rawurlencode( esc_attr( $cur_page['page_title'] ) ); - $page_permalink = urlencode( $cur_page['page_permalink'] ); - $initialized = true; - } - - switch ( $id ) { - - case 'facebook': - $link = 'https://www.facebook.com/sharer.php?u=' . $page_permalink; - $title = __( 'Facebook', 'better-amp' ); - $icon = ''; - break; - - case 'twitter': - - $by = ''; - if ( class_exists( 'Better_Social_Counter' ) ) { - $by = Better_Social_Counter::get_option( 'twitter_username' ); - - if ( $by === 'BetterSTU' && ! class_exists( 'BS_Demo_Helper' ) ) { - $by = ''; - } - - if ( ! empty( $by ) ) { - $by = ' @' . $by; - } else { - $by = ''; - } - } - - $link = 'https://twitter.com/share?text=' . $page_title . $by . '&url=' . $page_permalink; - $title = __( 'Twitter', 'better-amp' ); - $icon = ''; - break; - - case 'google_plus': - $link = 'https://plus.google.com/share?url=' . $page_permalink; - $title = __( 'Google+', 'better-amp' ); - $icon = ''; - break; - - case 'pinterest': - $_img_src = wp_get_attachment_image_src( get_post_thumbnail_id(), 'full' ); - $link = 'https://pinterest.com/pin/create/button/?url=' . $page_permalink . '&media=' . $_img_src[0] . '&description=' . $page_title; - $title = __( 'Pinterest', 'better-amp' ); - $icon = ''; - break; - - case 'linkedin': - $link = 'https://www.linkedin.com/shareArticle?mini=true&url=' . $page_permalink . '&title=' . $page_title; - $title = __( 'Linkedin', 'better-amp' ); - $icon = ''; - break; - - case 'tumblr': - $link = 'https://www.tumblr.com/share/link?url=' . $page_permalink . '&name=' . $page_title; - $title = __( 'Tumblr', 'better-amp' ); - $icon = ''; - break; - - case 'email': - $link = "mailto:?subject=" . $page_title . "&body=" . $page_permalink; - $title = __( 'Email', 'better-amp' ); - $icon = ''; - break; - - case 'telegram': - $link = 'https://telegram.me/share/url?url=' . $page_permalink . '&text=' . $page_title; - $title = __( 'Telegram', 'better-amp' ); - $icon = ''; - break; - - case 'whatsapp': - $link = 'whatsapp://send?text=' . $page_title . ' %0A%0A ' . $page_permalink; - $title = __( 'WhatsApp', 'better-amp' ); - $icon = ''; - break; - - case 'digg': - $link = 'https://www.digg.com/submit?url=' . $page_permalink; - $title = __( 'Digg', 'better-amp' ); - $icon = ''; - break; - - case 'reddit': - $link = 'https://reddit.com/submit?url=' . $page_permalink . '&title=' . $page_title; - $title = __( 'ReddIt', 'better-amp' ); - $icon = ''; - break; - - case 'stumbleupon': - $link = 'https://www.stumbleupon.com/submit?url=' . $page_permalink . '&title=' . $page_title; - $title = __( 'StumbleUpon', 'better-amp' ); - $icon = ''; - break; - - case 'vk': - $link = 'https://vkontakte.ru/share.php?url=' . $page_permalink; - $title = __( 'VK', 'better-amp' ); - $icon = ''; - break; - - default: - return ''; - } - - $extra_classes = $count_label ? ' has-count' : ''; - $output = '
  • '; - - $output .= $icon; - - if ( $show_title ) { - $output .= '' . wp_kses( $title, bf_trans_allowed_html() ) . ''; - } - - if ( $count_label ) { - $output .= sprintf( '%s', better_amp_human_number_format( $count_label ) ); - } - - $output .= '
  • '; - - return $output; - - }// better_amp_social_share_get_li -}// if - - -if ( ! function_exists( 'better_amp_is_customize_preview' ) ) { - /** - * Handy function customizer preview state for current page - * - * @since 1.0.0 - * - * @return bool - */ - function better_amp_is_customize_preview() { - - static $is_customizer; - - if ( is_null( $is_customizer ) ) { - $is_customizer = is_customize_preview(); - } - - return $is_customizer; - } -} - - -if ( ! function_exists( 'better_amp_customizer_hidden_attr' ) ) { - /** - * Helper for customizer preview - * - * @param $theme_mod - * - * @since 1.0.0 - * - */ - function better_amp_customizer_hidden_attr( $theme_mod ) { - - if ( better_amp_is_customize_preview() && ! better_amp_get_theme_mod( $theme_mod, false ) ) { - echo ' style="display:none"'; - } - } -} - -if ( ! function_exists( 'better_amp_language_attributes' ) ) { - /** - * Gets the language attributes for the html tag. - * - * @since 1.0.0 - */ - function better_amp_language_attributes() { - - $attributes = array(); - - if ( function_exists( 'is_rtl' ) && is_rtl() ) { - $attributes[] = 'dir="rtl"'; - } - - if ( $lang = get_bloginfo( 'language' ) ) { - $attributes[] = "lang=\"$lang\""; - - } - - $output = implode( ' ', $attributes ); - - echo $output; - } -} - -if ( ! function_exists( 'better_amp_get_post_parent' ) ) { - /** - * Get post parent - * - * @param int $attachment_id - * - * @since 1.1 - * @return bool|WP_Post WP_Post on success or false on failure - */ - function better_amp_get_post_parent( $attachment_id = null ) { - - if ( empty( $attachment_id ) && isset( $GLOBALS['post'] ) ) { - $attachment = $GLOBALS['post']; - } else { - $attachment = get_post( $attachment_id ); - } - - // Validate attachment - if ( ! $attachment || is_wp_error( $attachment ) ) { - return false; - } - - $parent = false; - - if ( ! empty( $attachment->post_parent ) ) { - $parent = get_post( $attachment->post_parent ); - if ( ! $parent || is_wp_error( $parent ) ) { - $parent = false; - } - } - - return $parent; - } -} - -if ( ! function_exists( 'better_amp_is_static_home_page' ) ) { - /** - * Is current page static home page - * - * @since 1.2.4 - * @return bool true on success or false on failure - */ - function better_amp_is_static_home_page() { - - return is_home() && apply_filters( 'better-amp/template/show-on-front', 'posts' ) === 'page' && - apply_filters( 'better-amp/template/page-on-front', 0 ); - } -} - -if ( ! function_exists( 'better_amp_comments_template' ) ) { - /** - * Retrieves comments template path in the current or parent template. - * - * @since 1.5.0 - */ - function better_amp_comments_template() { - - better_amp_locate_template( 'comments.php', true ); - } -} - -if ( ! function_exists( 'better_amp_list_comments' ) ) { - /** - * List comments for a particular post. - * - * @param string|array $args wp_list_comments first argument - * @param array $comment_query_args comment query arguments - * - * @since 1.5.0 - * - * @return string|void - * @see wp_list_comments for more documentation - * - * @global WP_Query $wp_query Global WP_Query instance. - */ - function better_amp_list_comments( $args = array(), $comment_query_args = array() ) { - - global $wp_query; - - $post_id = get_the_ID(); - - $comment_args = array( - 'orderby' => 'comment_date_gmt', - 'order' => 'ASC', - 'status' => 'approve', - 'post_id' => $post_id, - 'no_found_rows' => false, - ); - - if ( empty( $args['callback'] ) && better_amp_locate_template( 'comment-item.php' ) ) { - $args['callback'] = 'better_amp_comment_item'; - $args['end-callback'] = 'better_amp_comment_item_end'; - } - - $comments = new WP_Comment_Query( array_merge( $comment_args, $comment_query_args ) ); - - /** - * Filters the comments array. - * - * @param array $comments Array of comments supplied to the comments template. - * @param int $post_ID Post ID. - * - * @see comments_template - * - */ - $comments_list = apply_filters( 'comments_array', $comments->comments, $post_id ); - - // Save comments list to comments property of the main query to enable wordpress core - // function such as get_next_comments_link works in comments page - $wp_query->comments = $comments_list; - - return wp_list_comments( $args ); - } -} - -if ( ! function_exists( 'better_amp_comments_paginate' ) ) { - /** - * Displays pagination links for the comments on the current post. - * - * @since 1.5.0 - * - * @see wp_list_comments for more documentation - * - */ - function better_amp_comments_paginate() { - - // Nav texts with RTL support - if ( is_rtl() ) { - $prev = ' ' . better_amp_translation_get( 'comment_previous' ); - $next = better_amp_translation_get( 'comment_next' ) . ' '; - } else { - $next = better_amp_translation_get( 'comment_next' ) . ' '; - $prev = ' ' . better_amp_translation_get( 'comment_previous' ); - } - - previous_comments_link( $prev ); - - next_comments_link( $next ); - } -} - - -if ( ! function_exists( 'better_amp_comment_item' ) ) { - - /** - * Load comment-item.php file in the current or parent template. - * - * @param WP_Comment_Query $comment - * - * @since 1.5.0 - * - */ - function better_amp_comment_item( $comment ) { - - static $path; - - if ( is_null( $path ) ) { - $path = better_amp_locate_template( 'comment-item.php' ); - } - - if ( $path ) { - include $path; - } - } -} - - -if ( ! function_exists( 'better_amp_comment_item_end' ) ) { - /** - * Print li closing tag - * - * @since 1.5.0 - */ - function better_amp_comment_item_end() { - - echo ''; - } -} - - -if ( ! function_exists( 'better_amp_related_posts_query_args' ) ) { - /** - * Get Related Posts - * - * @param integer $count number of posts to return - * @param string $type - * @param integer|null $post_id - * @param array $params query extra arguments - * - * @return array query args array - */ - function better_amp_related_posts_query_args( $count = 5, $type = 'cat', $post_id = null, $params = array() ) { - - $post = get_post( $post_id ); - - if ( ! $post_id && isset( $post->ID ) ) { - $post_id = $post->ID; - } - - $args = array( - 'posts_per_page' => $count, - 'post__not_in' => array( $post_id ), - 'ignore_sticky_posts' => true, - ); - - switch ( $type ) { - - case 'cat': - $args['category__in'] = wp_get_post_categories( $post_id ); - break; - - case 'tag': - $tag_in = wp_get_object_terms( $post_id, 'post_tag', array( 'fields' => 'ids' ) ); - if ( $tag_in && ! is_wp_error( $tag_in ) ) { - - $args['tag__in'] = $tag_in; - } - break; - - case 'author': - if ( isset( $post->post_author ) ) { - $args['author'] = $post->post_author; - } - break; - - case 'cat-tag': - $args['category__in'] = wp_get_post_categories( $post_id ); - $args['tag__in'] = wp_get_object_terms( $post_id, 'post_tag', array( 'fields' => 'ids' ) ); - break; - - case 'cat-tag-author': - $args['category__in'] = wp_get_post_categories( $post_id ); - - if ( isset( $post->post_author ) ) { - $args['author'] = $post->post_author; - } - - $tag_in = wp_get_object_terms( $post_id, 'post_tag', array( 'fields' => 'ids' ) ); - - if ( $tag_in && ! is_wp_error( $tag_in ) ) { - $args['tag__in'] = $tag_in; - } - break; - - case 'rand': - case 'random': - case 'randomly': - $args['orderby'] = 'rand'; - break; - - } - - if ( $params ) { - $args = array_merge( $args, $params ); - } - - return $args; - - } // better_amp_related_posts_query_args -} // if - - -if ( ! function_exists( 'better_amp_min_suffix' ) ) { - /** - * Returns appropriate suffix for static files (min or not) - * - * @param string $before - * @param string $after - * - * @return string - */ - function better_amp_min_suffix( $before = '', $after = '' ) { - - static $suffix; - - if ( ! $suffix ) { - if ( ( defined( 'WP_DEBUG' ) && WP_DEBUG ) || ( defined( 'BF_DEV_MODE' ) && BF_DEV_MODE ) ) { - $suffix = ''; - } else { - $suffix = '.min'; - } - } - - return "$before$suffix$after"; - } -} - -if ( ! function_exists( 'better_amp_url_format' ) ) { - - /** - * Get the structure url of AMP pages permalink. - * - * @since 1.8.3 - * @return string start-point or end-pint - */ - function better_amp_url_format() { - - return apply_filters( 'better-amp/url/format', 'start-point' ); - } -} - -if ( ! function_exists( 'better_amp_excluded_urls_format' ) ) { - - /** - * Get list of url paths which is not available in AMP version. - * - * @since 1.9.8 - * @return array - */ - function better_amp_excluded_urls_format() { - - return apply_filters( 'better-amp/url/excluded', array() ); - } -} - - -add_action( 'registered_post_type', 'better_amp_collect_post_type_slugs', 8, 2 ); - -if ( ! function_exists( 'better_amp_collect_post_type_slugs' ) ) { - - /** - * Collect list of custom post type rewrite slug. - * - * @param string $post_type - * @param WP_Post_Type $post_type_object - * - * @since 1.9.11 - * - * @see better_amp_site_url - */ - function better_amp_collect_post_type_slugs( $post_type, $post_type_object ) { - - global $better_amp_post_type_slugs; - - if ( ! empty( $post_type_object->rewrite['slug'] ) ) { - - $better_amp_post_type_slugs[ $post_type ] = $post_type_object->rewrite['slug']; - } - } + + * @copyright Copyright (c) 2016, BetterStudio + */ + +// Used to save all template properties +$GLOBALS['better_amp_theme_core_props_cache'] = array(); + +// Used to save globals variables +$GLOBALS['better_amp_theme_core_globals_cache'] = array(); + +// Used to save template query +$GLOBALS['better_amp_theme_core_query'] = null; + +if ( ! function_exists( 'better_amp_locate_template' ) ) { + /** + * Retrieve the name of the highest priority amp template file that exists. + * + * @param string|array $template_names Template file(s) to search for, in order. + * @param bool $load If true the template file will be loaded if it is found. + * @param bool $require_once Whether to require_once or require. Default true. Has no effect if $load is false. + * + * @since 1.0.0 + * + * @return string The template filename if one is located. + * @see locate_template for more doc + * + */ + function better_amp_locate_template( $template_names, $load = false, $require_once = true ) { + + $wp_theme_can_override = current_theme_supports( 'better-amp-template' ); + + /** + * Scan WordPress theme directory at first, if override feature was enabled + */ + if ( $wp_theme_can_override ) { + $scan_directories = array( + STYLESHEETPATH . '/' . BETTER_AMP_OVERRIDE_TPL_DIR . '/', + TEMPLATEPATH . '/' . BETTER_AMP_OVERRIDE_TPL_DIR . '/', + better_amp_get_template_directory() + ); + } else { + $scan_directories = array( + better_amp_get_template_directory(), + STYLESHEETPATH . '/' . BETTER_AMP_OVERRIDE_TPL_DIR . '/', + TEMPLATEPATH . '/' . BETTER_AMP_OVERRIDE_TPL_DIR . '/', + ); + } + + $scan_directories = array_unique( array_filter( $scan_directories ) ); + + foreach ( $scan_directories as $theme_directory ) { + if ( $theme_file_path = better_amp_load_templates( $template_names, $theme_directory, $load, $require_once ) ) { + return $theme_file_path; + } + } + + // fallback: scan into theme-compat folder + return better_amp_load_templates( $template_names, BETTER_AMP_TPL_COMPAT_ABSPATH, $load, $require_once ); + } +} + +if ( ! function_exists( 'better_amp_load_templates' ) ) { + /** + * Require the template file + * + * @param string|array $templates + * @param string $theme_directory base directory. scan $templates files into this directory + * @param bool $load + * @param bool $require_once + * + * @since 1.0.0 + * + * @return bool|string + * @see better_amp_locate_template for parameters documentation + * + */ + function better_amp_load_templates( $templates, $theme_directory, $load = false, $require_once = true ) { + + foreach ( (array) $templates as $theme_file ) { + + $theme_file = ltrim( $theme_file, '/' ); + $theme_directory = trailingslashit( $theme_directory ); + + if ( file_exists( $theme_directory . $theme_file ) ) { + + if ( $load ) { + if ( $require_once ) { + require_once $theme_directory . $theme_file; + } else { + require $theme_directory . $theme_file; + } + } + + return $theme_directory . $theme_file; + } + } + + return false; + } +} + + +if ( ! function_exists( 'better_amp_get_view' ) ) { + /** + * Used to print view/partials. + * + * todo needs test + * + * @param string $folder Folder name + * @param string $file File name + * @param string $style Style + * @param bool $echo Echo the result or not + * + * @since 1.0.0 + * + * @return null|string + */ + function better_amp_get_view( $folder, $file = '', $style = '', $echo = true ) { + + // If file name passed as folder argument for short method call + if ( ! empty( $folder ) && empty( $file ) ) { + $file = $folder; + $folder = ''; + } + + $templates = array(); + + // File is inside another folder + if ( ! empty( $folder ) ) { + + $templates[] = $folder . '/' . $file . '.php'; + + } // File is inside style base folder + else { + + $templates[] = $file . '.php'; + + } + + $template = better_amp_locate_template( $templates, false, false ); + + if ( $echo == false ) { + ob_start(); + } + + if ( ! empty( $template ) ) { + include $template; + } + + if ( $echo == false ) { + return ob_get_clean(); + } + + } // better_amp_get_view +} + + +// +// +// Blocks properties +// +// + +if ( ! function_exists( 'better_amp_get_prop' ) ) { + /** + * Used to get a property value. + * + * @param string $id + * @param mixed $default + * + * @since 1.0.0 + * + * @return mixed + */ + function better_amp_get_prop( $id, $default = null ) { + + global $better_amp_theme_core_props_cache; + + if ( isset( $better_amp_theme_core_props_cache[ $id ] ) ) { + return $better_amp_theme_core_props_cache[ $id ]; + } else { + return $default; + } + } +} + + +if ( ! function_exists( 'better_amp_echo_prop' ) ) { + /** + * Used to print a property value. + * + * @param string $id + * @param mixed $default + * + * @since 1.0.0 + * + * @return mixed + */ + function better_amp_echo_prop( $id, $default = null ) { + + global $better_amp_theme_core_props_cache; + + if ( isset( $better_amp_theme_core_props_cache[ $id ] ) ) { + echo $better_amp_theme_core_props_cache[ $id ]; // escaped before + } else { + echo $default; // escaped before + } + } +} + + +if ( ! function_exists( 'better_amp_get_prop_class' ) ) { + /** + * Used to get block class property. + * + * @since 1.0.0 + * + * @return string + */ + function better_amp_get_prop_class() { + + global $better_amp_theme_core_props_cache; + + if ( isset( $better_amp_theme_core_props_cache['class'] ) ) { + return $better_amp_theme_core_props_cache['class']; + } else { + return ''; + } + } +} + + +if ( ! function_exists( 'better_amp_get_prop_thumbnail_size' ) ) { + /** + * Used to get block thumbnail size property. + * + * @param string $default + * + * @since 1.0.0 + * + * @return string + */ + function better_amp_get_prop_thumbnail_size( $default = 'thumbnail' ) { + + global $better_amp_theme_core_props_cache; + + if ( isset( $better_amp_theme_core_props_cache['thumbnail-size'] ) ) { + return $better_amp_theme_core_props_cache['thumbnail-size']; + } else { + return $default; + } + } +} + + +if ( ! function_exists( 'better_amp_set_prop' ) ) { + /** + * Used to set a block property value. + * + * @param string $id + * @param mixed $value + * + * @since 1.0.0 + * + * @return mixed + */ + function better_amp_set_prop( $id, $value ) { + + global $better_amp_theme_core_props_cache; + + $better_amp_theme_core_props_cache[ $id ] = $value; + } +} + + +if ( ! function_exists( 'better_amp_set_prop_class' ) ) { + /** + * Used to set a block class property value. + * + * @param mixed $value + * @param bool $clean + * + * @since 1.0.0 + * + * @return mixed + */ + function better_amp_set_prop_class( $value, $clean = false ) { + + global $better_amp_theme_core_props_cache; + + if ( $clean ) { + $better_amp_theme_core_props_cache['class'] = $value; + } else { + $better_amp_theme_core_props_cache['class'] = $value . ' ' . better_amp_get_prop_class(); + } + } +} + + +if ( ! function_exists( 'better_amp_set_prop_thumbnail_size' ) ) { + /** + * Used to set a block property value. + * + * @param mixed $value + * + * @since 1.0.0 + * + * @return mixed + */ + function better_amp_set_prop_thumbnail_size( $value = 'thumbnail' ) { + + global $better_amp_theme_core_props_cache; + + $better_amp_theme_core_props_cache['thumbnail-size'] = $value; + } +} + + +if ( ! function_exists( 'better_amp_unset_prop' ) ) { + /** + * Used to remove a property from block property list. + * + * @param string $id + * + * @since 1.0.0 + * + * @return mixed + */ + function better_amp_unset_prop( $id ) { + + global $better_amp_theme_core_props_cache; + + unset( $better_amp_theme_core_props_cache[ $id ] ); + } +} + + +if ( ! function_exists( 'better_amp_clear_props' ) ) { + /** + * Used to clear all properties. + * + * @since 1.0.0 + * + * @return void + */ + function better_amp_clear_props() { + + global $better_amp_theme_core_props_cache; + + $better_amp_theme_core_props_cache = array(); + } +} + + +// +// +// Global Variables +// +// + + +if ( ! function_exists( 'better_amp_set_global' ) ) { + /** + * Used to set a global variable. + * + * @param string $id + * @param mixed $value + * + * @since 1.0.0 + * + * @return mixed + */ + function better_amp_set_global( $id, $value ) { + + global $better_amp_theme_core_globals_cache; + + $better_amp_theme_core_globals_cache[ $id ] = $value; + } +} + + +if ( ! function_exists( 'better_amp_unset_global' ) ) { + /** + * Used to remove a global variable. + * + * @param string $id + * + * @since 1.0.0 + * + * @return mixed + */ + function better_amp_unset_global( $id ) { + + global $better_amp_theme_core_globals_cache; + + unset( $better_amp_theme_core_globals_cache[ $id ] ); + } +} + + +if ( ! function_exists( 'better_amp_get_global' ) ) { + /** + * Used to get a global value. + * + * @param string $id + * @param mixed $default + * + * @since 1.0.0 + * + * @return mixed + */ + function better_amp_get_global( $id, $default = null ) { + + global $better_amp_theme_core_globals_cache; + + if ( isset( $better_amp_theme_core_globals_cache[ $id ] ) ) { + return $better_amp_theme_core_globals_cache[ $id ]; + } else { + return $default; + } + } +} + + +if ( ! function_exists( 'better_amp_echo_global' ) ) { + /** + * Used to print a global value. + * + * @param string $id + * @param mixed $default + * + * @since 1.0.0 + * + * @return mixed + */ + function better_amp_echo_global( $id, $default = null ) { + + global $better_amp_theme_core_globals_cache; + + if ( isset( $better_amp_theme_core_globals_cache[ $id ] ) ) { + echo $better_amp_theme_core_globals_cache[ $id ]; // escaped before + } else { + echo $default; // escaped before + } + } +} + + +if ( ! function_exists( 'better_amp_clear_globals' ) ) { + /** + * Used to clear all properties. + * + * @since 1.0.0 + * + * @return void + */ + function better_amp_clear_globals() { + + global $better_amp_theme_core_globals_cache; + + $better_amp_theme_core_globals_cache = array(); + } +} + + +// +// +// Queries +// +// + +if ( ! function_exists( 'better_amp_get_query' ) ) { + /** + * Used to get current query. + * + * @since 1.0.0 + * + * @return WP_Query|null + */ + function better_amp_get_query() { + + global $better_amp_theme_core_query; + + if ( ! is_a( $better_amp_theme_core_query, 'WP_Query' ) ) { + global $wp_query; + + $better_amp_theme_core_query = &$wp_query; + } + + return $better_amp_theme_core_query; + } +} + + +if ( ! function_exists( 'better_amp_set_query' ) ) { + /** + * Used to get current query. + * + * @param WP_Query $query + * + * @since 1.0.0 + * + */ + function better_amp_set_query( &$query ) { + + global $better_amp_theme_core_query; + + $better_amp_theme_core_query = $query; + } +} + + +if ( ! function_exists( 'better_amp_clear_query' ) ) { + /** + * Used to get current query. + * + * @param bool $reset_query + * + * @since 1.0.0 + * + */ + function better_amp_clear_query( $reset_query = true ) { + + global $better_amp_theme_core_query; + + $better_amp_theme_core_query = null; + + // This will remove obscure bugs that occur when the previous wp_query object is not destroyed properly before another is set up. + if ( $reset_query ) { + wp_reset_query(); + } + } +} + + +if ( ! function_exists( 'better_amp_have_posts' ) ) { + /** + * Used for checking have posts in advanced way! + * + * @since 1.0.0 + */ + function better_amp_have_posts() { + + // Add default query to better_template query if its not added or default query is used. + if ( ! better_amp_get_query() instanceof WP_Query ) { + global $wp_query; + + better_amp_set_query( $wp_query ); + } + + // If count customized + if ( better_amp_get_prop( 'posts-count', null ) != null ) { + if ( better_amp_get_prop( 'posts-counter', 1 ) > better_amp_get_prop( 'posts-count' ) ) { + return false; + } else { + if ( better_amp_get_query()->current_post + 1 < better_amp_get_query()->post_count ) { + return true; + } else { + return false; + } + } + } else { + return better_amp_get_query()->current_post + 1 < better_amp_get_query()->post_count; + } + } +} + + +if ( ! function_exists( 'better_amp_the_post' ) ) { + /** + * Custom the_post for custom counter functionality + * + * @since 1.0.0 + */ + function better_amp_the_post() { + + // If count customized + if ( better_amp_get_prop( 'posts-count', null ) != null ) { + better_amp_set_prop( 'posts-counter', absint( better_amp_get_prop( 'posts-counter', 1 ) ) + 1 ); + } + + // Do default the_post + better_amp_get_query()->the_post(); + } +} + + +if ( ! function_exists( 'better_amp_the_post_thumbnail' ) ) { + /** + * Display the post thumbnail. + * + * @param string $size + * @param string $attr + * + * @since 1.1.0 + * + */ + function better_amp_the_post_thumbnail( $size = 'post-thumbnail', $attr = '' ) { + + if ( empty( $attr ) ) { + $attr = array( + 'alt' => the_title_attribute( array( 'echo' => false ) ), + 'layout' => 'responsive', + ); + } + + the_post_thumbnail( $size, $attr ); + } +} + + +if ( ! function_exists( 'better_amp_is_main_query' ) ) { + /** + * Detects and returns that current query is main query or not? with support of better_{get|set}_query + * + * @since 1.0.0 + * + * @return WP_Query|null + */ + function better_amp_is_main_query() { + + global $better_amp_theme_core_query; + + // Add default query to better_template query if its not added or default query is used. + if ( ! is_a( $better_amp_theme_core_query, 'WP_Query' ) ) { + global $wp_query; + + return $wp_query->is_main_query(); + } + + return $better_amp_theme_core_query->is_main_query(); + } +} + + +if ( ! function_exists( 'better_amp_head' ) ) { + /** + * Fire the better_amp_head action. + * + * @since 1.0.0 + */ + function better_amp_head() { + + do_action( 'better-amp/template/head' ); + } +} + + +if ( ! function_exists( 'better_amp_footer' ) ) { + /** + * Fire the better_amp_footer action. + * + * @since 1.0.0 + */ + function better_amp_footer() { + + do_action( 'better-amp/template/footer' ); + } +} + + +if ( ! function_exists( 'better_amp_body_class' ) ) { + /** + * Display the classes for the body element. + * + * @param string|array $class One or more classes to add to the class list. + * + * @since 1.0.0 + */ + function better_amp_body_class( $class = '' ) { + + echo 'class="' . join( ' ', get_body_class( $class ) ) . '"'; + } +} + + +if ( ! function_exists( 'better_amp_get_header' ) ) { + /** + * Load footer template. + * + * @param string $name The name of the specialised header. + * + * @since 1.0.0 + */ + function better_amp_get_header( $name = null ) { + + $templates = array(); + + $name = (string) $name; + + if ( '' !== $name ) { + $templates[] = "header-{$name}.php"; + } + + $templates[] = 'header.php'; + + better_amp_locate_template( $templates, true ); + } +} + + +if ( ! function_exists( 'better_amp_get_footer' ) ) { + /** + * Load footer template. + * + * @param string $name Name of the specific footer file to use. + * + * @since 1.0.0 + */ + function better_amp_get_footer( $name = null ) { + + $templates = array(); + + $name = (string) $name; + + if ( '' !== $name ) { + $templates[] = "footer-{$name}.php"; + } + + $templates[] = 'footer.php'; + + better_amp_locate_template( $templates, true ); + } +} + + +if ( ! function_exists( 'better_amp_get_sidebar' ) ) { + /** + * Load sidebar template. + * + * @param string $name The name of the specialised sidebar. + * + * @since 1.0.0 + */ + function better_amp_get_sidebar( $name = null ) { + + $templates = array(); + + $name = (string) $name; + + if ( '' !== $name ) { + $templates[] = "sidebar-{$name}.php"; + } + + $templates[] = 'sidebar.php'; + + better_amp_locate_template( $templates, true ); + } +} + + +if ( ! function_exists( 'better_amp_get_template_info' ) ) { + /** + * Get active amp theme information + * + * array { + * + * @type string $Version Template Semantic Version Number {@link http://semver.org/} + * @type string $ScreenShot -optional: screenshot.png- Relative Path to ScreenShot. + * @type int|string $MaxWidth -optional:600- Maximum Template Container Width. + * @type string $TemplateRoot Absolute Path to Template Directory + * @type string $Description Template Description + * @type string $AuthorURI Template Author URL + * @type string $Author Template Author + * @type string $Name Template name + * @type string $ThemeURI Template URL + * } + * + * @since 1.0.0 + * + * @return array + */ + function better_amp_get_template_info() { + + return wp_parse_args( + apply_filters( 'better-amp/template/active-template', array() ), + array( + 'ScreenShot' => 'screenshot.png', + 'MaxWidth' => 780, + 'view' => 'general' + ) + ); + } +} + + +if ( ! function_exists( 'better_amp_get_template_directory' ) ) { + /** + * Get absolute path to active better-amp theme directory + * + * @since 1.0.0 + * + * @return string + */ + function better_amp_get_template_directory() { + + if ( $theme_info = better_amp_get_template_info() ) { + return $theme_info['TemplateRoot']; + } + + return ''; + } +} + + +if ( ! function_exists( 'better_amp_get_container_width' ) ) { + /** + * Get maximum container width + * + * @since 1.0.0 + * + * @return int + */ + function better_amp_get_container_width() { + + $info = better_amp_get_template_info(); + + return (int) $info['MaxWidth']; + } +} + + +if ( ! function_exists( 'better_amp_guess_height' ) ) { + /** + * Calculate height fits to width + * + * @since 1.0.0 + * + * @return int + */ + function better_amp_guess_height() { + + return better_amp_get_container_width() * 0.75; + } +} + + +if ( ! function_exists( 'better_amp_get_hw_attr' ) ) { + /** + * Get width & height attribute + * + * @param string $width Custom width + * @param string $height Custom height + * + * @since 1.0.0 + * + * @return string + */ + function better_amp_get_hw_attr( $width = '', $height = '' ) { + + $attr = ''; + + if ( empty( $width ) ) { + $width = better_amp_get_container_width(); + } + + if ( $width ) { + $attr .= 'width="' . intval( $width ) . '" '; + } + + if ( empty( $height ) ) { + $height = better_amp_guess_height(); + } + + if ( $height ) { + $attr .= 'height="' . intval( $height ) . '" '; + } + + return $attr; + } +} + + +if ( ! function_exists( 'better_amp_hw_attr' ) ) { + /** + * Get width & height attribute + * + * @param string $width + * @param string $height + * + * @since 1.0.0 + * + * @return int + */ + function better_amp_hw_attr( $width = '', $height = '' ) { + + echo better_amp_get_hw_attr( $width, $height ); + } +} + + +if ( ! function_exists( 'better_amp_get_comment_link' ) ) { + /** + * Returns Non-AMP comment link for AMP post + * + * @since 1.0.0 + * + * @return int + */ + function better_amp_get_comment_link() { + + $prev = Better_AMP_Content_Sanitizer::turn_url_transform_off_on( false ); + + $comments_url = get_permalink() . '#respond'; + + Better_AMP_Content_Sanitizer::turn_url_transform_off_on( $prev ); + + return $comments_url; + } +} + +if ( ! function_exists( 'better_amp_comment_reply_link' ) ) { + /** + * Retrieve the HTML content for reply to comment link. + * + * @param array $args @see comment_reply_link for documentation + * + * @since 1.5.0 + * @return void|false|string + */ + function better_amp_comment_reply_link( $args = array() ) { + + $current_value = Better_AMP_Content_Sanitizer::$enable_url_transform; + Better_AMP_Content_Sanitizer::$enable_url_transform = false; + + $result = comment_reply_link( $args ); + Better_AMP_Content_Sanitizer::$enable_url_transform = $current_value; + + return $result; + } +} + + +if ( ! function_exists( 'better_amp_comment_link' ) ) { + /** + * Non-AMP comment link for AMP post + * + * @since 1.0.0 + * + * @return int + */ + function better_amp_comment_link() { + + echo esc_attr( better_amp_get_comment_link() ); + } +} + +if ( ! function_exists( 'better_amp_rel_canonical_url' ) ) { + + /** + * Get rel=canonical tag url. + * + * @since 1.8.3 + * @return string + */ + function better_amp_rel_canonical_url() { + + $canonical_url = better_amp_get_canonical_url(); + + if ( ! $canonical_url ) { + $canonical_url = better_amp_site_url(); + } + + $final_canonical = apply_filters('better-amp/includes/functions/canonical',Better_AMP_Content_Sanitizer::transform_to_none_amp_url( $canonical_url )); + return $final_canonical; + } +} + +if ( ! function_exists( 'better_amp_print_rel_canonical' ) ) { + /** + * Print rel=canonical tag in AMP version + * + * @param bool $echo + * + * @since 1.0.0 + * @return string + */ + function better_amp_print_rel_canonical() { + + + if ( $canonical = better_amp_rel_canonical_url() ) { + ?> + + '', + 'bamp-skip-redirect' => '', + ) ); + + return sprintf( '%s://%s%s', $parse['scheme'], $parse['host'], add_query_arg( $valid_queries, $url ) ); + } +} + + +if ( ! function_exists( 'better_amp_print_rel_amphtml' ) ) { + /** + * Print rel=amphtml tag + * + * @since 1.0.0 + */ + function better_amp_print_rel_amphtml() { + + if ( ! Better_AMP::get_instance()->amp_version_exists() ) { + return; + } + + $page_url = better_amp_get_canonical_url(); + $canonical = Better_AMP_Content_Sanitizer::transform_to_amp_url( + $page_url + ); + + if ( $canonical !== $page_url ) { + ?> + + body{-webkit-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-moz-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-ms-animation:-amp-start 8s steps(1,end) 0s 1 normal both;animation:-amp-start 8s steps(1,end) 0s 1 normal both}@-webkit-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-moz-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-ms-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-o-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@keyframes -amp-start{from{visibility:hidden}to{visibility:visible}} +AMP_Boilerplate; + + } +} + + +if ( ! function_exists( 'better_amp_get_search_page_url' ) ) { + /** + * Get AMP index page url + * + * @param string $path Optional. Path relative to the site URL. Default empty. + * @param string $before_sp Custom string to append before amp start point. Default empty. + * @param bool $front_page_url Optional. see the following comment. + * + * @since 1.0.0 + * @return string + * @global array $better_amp_post_type_slugs list of custom post type rewrite slug @see better_amp_collect_post_type_slugs + * + */ + function better_amp_site_url( $path = '', $before_sp = '', $front_page_url = null ) { + + if ( $structure = better_amp_using_permalink_structure() ) { + + /** + * Do not append permalink structure prefix on custom post type urls because The prefix + * is just for default WordPress post type (post) and it can not stay before custom post type urls. + * + * @since 1.9.11 + */ + if ( $url_prefix = better_amp_permalink_prefix() ) { + + global $better_amp_post_type_slugs; + + // Grab all characters until first slash + $maybe_post_slug_slug = substr( $path, 0, strpos( $path, '/' ) ); + + if ( $better_amp_post_type_slugs && in_array( $maybe_post_slug_slug, $better_amp_post_type_slugs ) ) { // is it a custom post type single permalink ? + + $url_prefix = ''; + } + } + + if ( ! isset( $front_page_url ) ) { + $front_page_url = $path === ''; + } + + if ( ! empty( $path ) && $url_prefix && preg_match( '#^' . preg_quote( $url_prefix, '#' ) . '(.+)$#i', $path, $match ) ) { + + $path = $match[1]; + $before_sp = str_replace( $match[1], '', $match[0] ) . $before_sp; + } + + /** + * Prepend permalink structure prefix before amp cause 404 error in search page + * So we added $front_page_url parameter to bypass this functionality. + * + * @see better_amp_permalink_prefix + * @see better_amp_get_search_page_url + * + * @example when structure is /topics/%post_id%/%postname%/ and $front_page_url = false + * Then the search page will be /topics/amp/?s which cause 404 error + */ + $url = trailingslashit( home_url( $front_page_url ? '' : $url_prefix ) ); + $url .= $before_sp ? trailingslashit( $before_sp ) : ''; + $url .= Better_AMP::STARTPOINT; + + if ( $path ) { + + $url .= '/' . ltrim( $path, '/' ); + } + + } else { + + $url = add_query_arg( Better_AMP::STARTPOINT, true, home_url( $path ) ); + } + + return $url; + } +} + + +if ( ! function_exists( 'better_amp_do_shortcode' ) ) { + /** + * Do component shortcodes like wordpress: do_shortcode function + * + * @since 1.0.0 + * + * @return string Content with shortcodes filtered out + */ + function better_amp_do_shortcode() { + + static $registered; + + $args = func_get_args(); + + if ( ! $registered ) { + + Better_AMP::get_instance()->call_components_method( 'register_shortcodes' ); + + $registered = true; + } + + return call_user_func_array( 'do_shortcode', $args ); + } +} + + +if ( ! function_exists( 'better_amp_theme_set_menu_walker' ) ) { + /** + * Change menu walker only for main amp site navigation + * + * Walker of navigation menu with 'amp-sidebar-nav' theme_location going to change' Better_AMP_Menu_Walker'. + * + * + * @param array $args Array of wp_nav_menu() arguments. + * + * @since 1.0.0 + * @return array modified $args + * @see Better_AMP_Menu_Walker + * @see default-filters.php file + * + */ + function better_amp_theme_set_menu_walker( $args ) { + + if ( ! is_better_amp() | ! has_nav_menu( $args['theme_location'] ) ) { + return $args; + } + + if ( apply_filters( 'better-amp/template/set-menu-walker', $args['theme_location'] === 'amp-sidebar-nav', $args ) ) { + + add_theme_support( 'better-amp-navigation' ); + + $args['walker'] = new Better_AMP_Menu_Walker; + } + + return $args; + } +} + + +if ( ! function_exists( 'better_amp_enqueue_rtl_style' ) ) { + /** + * Print rtl.css content as inline css in RTL version if file exists + * + * @since 1.0.0 + */ + function better_amp_enqueue_rtl_style() { + + if ( ! is_rtl() ) { + return; + } + + $theme_info = better_amp_get_template_info(); + + $rtl_style = trailingslashit( $theme_info['TemplateRoot'] ) . 'rtl.css'; + + if ( file_exists( $rtl_style ) ) { + better_amp_enqueue_inline_style( $rtl_style, 'better-amp-rtl' ); + } + } +} + + +if ( ! function_exists( 'better_amp_direction' ) ) { + /** + * Handy function to print 'right' string on rtl mode and 'left' otherwise! + * + * * @param bool $reverse + * + * @since 1.0.0 + * + */ + function better_amp_direction( $reverse = false ) { + + if ( $reverse ) { + echo is_rtl() ? 'left' : 'right'; + } else { + echo is_rtl() ? 'right' : 'left'; + } + + } +} + + +if ( ! function_exists( 'better_amp_fix_customizer_statics' ) ) { + /** + * Fix for loading js/css static files in customize.php page + * + * @since 1.0.0 + */ + function better_amp_fix_customizer_statics() { + + if ( is_customize_preview() ) { + add_action( 'better-amp/template/head', 'wp_head', 1, 1 ); + add_action( 'better-amp/template/footer', 'wp_footer', 1, 1 ); + } + + } // better_amp_fix_customizer_statics +} + + +/** + * Better-AMP Template functions + * + * We used wordpress core functions and renamed some get_* functions to better_amp_* + * + * @link https://developer.wordpress.org/themes/basics/template-hierarchy/ + * @see wp-includes/template.php + * + * | Original Name | AMP Name | + * | ---------------------------------- | ------------------------------------------ | + * | get_embed_template | better_amp_embed_template | + * | get_404_template | better_amp_404_template | + * | get_search_template | better_amp_search_template | + * | get_front_page_template | better_amp_front_page_template | + * | get_home_template | better_amp_home_template | + * | get_post_type_archive_template | better_amp_post_type_archive_template | + * | get_taxonomy_template | better_amp_taxonomy_template | + * | get_attachment_template | better_amp_attachment_template | + * | get_single_template | better_amp_single_template | + * | get_page_template | better_amp_page_template | + * | get_singular_template | better_amp_singular_template | + * | get_category_template | better_amp_category_template | + * | get_tag_template | better_amp_tag_template | + * | get_author_template | better_amp_author_template | + * | get_date_template | better_amp_date_template | + * | get_archive_template | better_amp_archive_template | + * | get_paged_template | better_amp_paged_template | + * | get_archive_template | better_amp_archive_template | + * | get_index_template | better_amp_index_template | + * | get_template_part | better_amp_template_part | + */ + + +if ( ! function_exists( 'better_amp_embed_template' ) ) { + /** + * Retrieves an embed template path in the current or parent template. + * + * @since 1.0.0 + * + * @return string Full path to embed template file. + * @see get_embed_template + * + */ + function better_amp_embed_template() { + + $object = get_queried_object(); + + $templates = array(); + + if ( ! empty( $object->post_type ) ) { + + $post_format = get_post_format( $object ); + + if ( $post_format ) { + $templates[] = "embed-{$object->post_type}-{$post_format}.php"; + } + + $templates[] = "embed-{$object->post_type}.php"; + } + + $templates[] = "embed.php"; + + return better_amp_locate_template( $templates ); + } +} + + +if ( ! function_exists( 'better_amp_404_template' ) ) { + /** + * Retrieve path of 404 template in current or parent template. + * + * @since 1.0.0 + * + * @return string Full path to 404 template file. + * @see get_404_template() + * + */ + function better_amp_404_template() { + + return better_amp_locate_template( '404.php' ); + } +} + + +if ( ! function_exists( 'better_amp_search_template' ) ) { + /** + * Retrieve path of search template in current or parent template. + * + * @since 1.0.0 + * + * @return string Full path to search template file. + * @see get_search_template() + * + */ + function better_amp_search_template() { + + return better_amp_locate_template( 'search.php' ); + } +} + + +if ( ! function_exists( 'better_amp_front_page_template' ) ) { + /** + * Retrieve path of front-page template in current or parent template. + * + * @since 1.0.0 + * + * @return string Full path to front page template file. + * @see get_front_page_template() + * + */ + function better_amp_front_page_template() { + + return better_amp_locate_template( 'front-page.php' ); + } +} + +if ( ! function_exists( 'better_amp_static_home_page_template' ) ) { + /** + * Retrieve path of static homepage template in current or parent template. + * + * @since 1.2.4 + * @return string Full path to static home page template file. + */ + function better_amp_static_home_page_template() { + + if ( $template = better_amp_front_page_template() ): + elseif ( $template = better_amp_page_template() ): + elseif ( $template = better_amp_singular_template() ): + endif; + + return $template; + } +} + + +if ( ! function_exists( 'better_amp_home_template' ) ) { + /** + * Retrieve path of home template in current or parent template. + * + * @since 1.0.0 + * + * @return string Full path to home template file. + * @see get_home_template() + * + */ + function better_amp_home_template() { + + $templates = array( 'home.php', 'index.php' ); + + return better_amp_locate_template( $templates ); + } +} + + +if ( ! function_exists( 'better_amp_archive_template' ) ) { + /** + * Retrieve path of archive template in current or parent template. + * + * @since 1.0.0 + * + * @return string Full path to archive template file. + * @see get_archive_template() + * + */ + function better_amp_archive_template() { + + $post_types = array_filter( (array) get_query_var( 'post_type' ) ); + + $templates = array(); + + if ( count( $post_types ) == 1 ) { + $post_type = reset( $post_types ); + $templates[] = "archive-{$post_type}.php"; + } + + $templates[] = 'archive.php'; + + return better_amp_locate_template( $templates ); + } +} + + +if ( ! function_exists( 'better_amp_post_type_archive_template' ) ) { + /** + * Retrieve path of post type archive template in current or parent template. + * + * @since 1.0.0 + * + * @return string Full path to archive template file. + * @see better_amp_archive_template() + * @see get_post_type_archive_template() + * + */ + function better_amp_post_type_archive_template() { + + $post_type = get_query_var( 'post_type' ); + + if ( is_array( $post_type ) ) { + $post_type = reset( $post_type ); + } + + $obj = get_post_type_object( $post_type ); + + if ( ! $obj->has_archive ) { + return ''; + } + + return better_amp_archive_template(); + } +} + + +if ( ! function_exists( 'better_amp_taxonomy_template' ) ) { + /** + * Retrieve path of taxonomy template in current or parent template. + * + * @since 1.0.0 + * + * @return string Full path to taxonomy template file. + */ + function better_amp_taxonomy_template() { + + $term = get_queried_object(); + + $templates = array(); + + if ( ! empty( $term->slug ) ) { + $taxonomy = $term->taxonomy; + $templates[] = "taxonomy-$taxonomy-{$term->slug}.php"; + $templates[] = "taxonomy-$taxonomy.php"; + } + + $templates[] = 'taxonomy.php'; + + return better_amp_locate_template( $templates ); + } +} + + +if ( ! function_exists( 'better_amp_attachment_template' ) ) { + /** + * Retrieve path of attachment template in current or parent template. + * + * @since 1.0.0 + * + * @return string Full path to attachment template file. + * @global array $posts + * + */ + function better_amp_attachment_template() { + + $attachment = get_queried_object(); + + $templates = array(); + + if ( $attachment ) { + + if ( false !== strpos( $attachment->post_mime_type, '/' ) ) { + list( $type, $subtype ) = explode( '/', $attachment->post_mime_type ); + } else { + list( $type, $subtype ) = array( $attachment->post_mime_type, '' ); + } + + if ( ! empty( $subtype ) ) { + $templates[] = "{$type}-{$subtype}.php"; + $templates[] = "{$subtype}.php"; + } + $templates[] = "{$type}.php"; + + } + + $templates[] = 'attachment.php'; + + return better_amp_locate_template( $templates ); + } +} + + +if ( ! function_exists( 'better_amp_single_template' ) ) { + /** + * Retrieve path of single template in current or parent template. + * + * @since 1.0.0 + * + * @return string Full path to single template file. + */ + function better_amp_single_template() { + + $object = get_queried_object(); + + $templates = array(); + + if ( ! empty( $object->post_type ) ) { + $templates[] = "single-{$object->post_type}-{$object->post_name}.php"; + $templates[] = "single-{$object->post_type}.php"; + } + + $templates[] = "single.php"; + + return better_amp_locate_template( $templates ); + } +} + + +if ( ! function_exists( 'better_amp_page_template' ) ) { + /** + * Retrieve path of page template in current or parent template. + * + * @since 1.0.0 + * + * @return string Full path to page template file. + * @see get_page_template() + * + */ + function better_amp_page_template() { + + $id = get_queried_object_id(); + $template = get_page_template_slug(); + $pagename = get_query_var( 'pagename' ); + + if ( ! $pagename && $id ) { + + // If a static page is set as the front page, $pagename will not be set. Retrieve it from the queried object + $post = get_queried_object(); + + if ( $post ) { + $pagename = $post->post_name; + } + + } + + $templates = array(); + + if ( $template && 0 === validate_file( $template ) ) { + $templates[] = $template; + } + + if ( $pagename ) { + $templates[] = "page-$pagename.php"; + } + + if ( $id ) { + $templates[] = "page-$id.php"; + } + + $templates[] = 'page.php'; + + return better_amp_locate_template( $templates ); + } +} + + +if ( ! function_exists( 'better_amp_singular_template' ) ) { + /** + * Retrieves the path of the singular template in current or parent template. + * + * @since 1.0.0 + * + * @return string Full path to singular template file + */ + function better_amp_singular_template() { + + return better_amp_locate_template( 'singular.php' ); + } +} + + +if ( ! function_exists( 'better_amp_category_template' ) ) { + /** + * Retrieve path of category template in current or parent template. + * + * @since 1.0.0 + * + * @return string Full path to category template file. + */ + function better_amp_category_template() { + + $category = get_queried_object(); + + $templates = array(); + + if ( ! empty( $category->slug ) ) { + $templates[] = "category-{$category->slug}.php"; + $templates[] = "category-{$category->term_id}.php"; + } + + $templates[] = 'category.php'; + + return better_amp_locate_template( $templates ); + } +} + + +if ( ! function_exists( 'better_amp_tag_template' ) ) { + /** + * Retrieve path of tag template in current or parent template. + * + * @since 1.0.0 + * + * @return string Full path to tag template file. + * @see get_query_template() + * + */ + function better_amp_tag_template() { + + $tag = get_queried_object(); + + $templates = array(); + + if ( ! empty( $tag->slug ) ) { + $templates[] = "tag-{$tag->slug}.php"; + $templates[] = "tag-{$tag->term_id}.php"; + } + + $templates[] = 'tag.php'; + + return better_amp_locate_template( $templates ); + } +} + + +if ( ! function_exists( 'better_amp_author_template' ) ) { + + /** + * Retrieve path of author template in current or parent template. + * + * @since 1.0.0 + * + * @return string Full path to author template file. + */ + function better_amp_author_template() { + + $author = get_queried_object(); + + $templates = array(); + + if ( $author instanceof WP_User ) { + $templates[] = "author-{$author->user_nicename}.php"; + $templates[] = "author-{$author->ID}.php"; + } + + $templates[] = 'author.php'; + + return better_amp_locate_template( $templates ); + } +} + + +if ( ! function_exists( 'better_amp_date_template' ) ) { + /** + * Retrieve path of date template in current or parent template. + * + * @since 1.0.0 + * + * @return string Full path to date template file. + */ + function better_amp_date_template() { + + return better_amp_locate_template( 'date.php' ); + } +} + + +if ( ! function_exists( 'better_amp_paged_template' ) ) { + /** + * Retrieve path of paged template in current or parent template. + * + * @since 1.0.0 + * + * @return string Full path to paged template file. + */ + function better_amp_paged_template() { + + return better_amp_locate_template( 'paged.php' ); + } +} + + +if ( ! function_exists( 'better_amp_index_template' ) ) { + /** + * Retrieve path of index template in current or parent template. + * + * @since 1.0.0 + * + * @return string Full path to index template file. + */ + function better_amp_index_template() { + + return better_amp_locate_template( 'index.php' ); + } +} + + +if ( ! function_exists( 'better_amp_get_search_form' ) ) { + /** + * Retrieve path of search form in current or parent template. + * + * @since 1.0.0 + * + * @return string Full path to index template file. + */ + function better_amp_get_search_form() { + + add_theme_support( 'better-amp-form' ); + + return better_amp_locate_template( 'searchform.php', true ); + } +} + + +if ( ! function_exists( 'better_amp_template_part' ) ) { + /** + * Load a template part into a template + * + * @param string $slug The slug name for the generic template. + * @param string $name The name of the specialised template. + * + * @since 1.0.0 + * @see get_template_part for more documentation + * + */ + function better_amp_template_part( $slug, $name = null ) { + + $templates = array(); + $name = (string) $name; + if ( '' !== $name ) { + $templates[] = "{$slug}-{$name}.php"; + } + + $templates[] = "{$slug}.php"; + + better_amp_locate_template( $templates, true, false ); + } +} + + +if ( ! function_exists( 'better_amp_get_search_page_url' ) ) { + /** + * Get search page url + * + * @since 1.0.0 + * + * @return string + */ + function better_amp_get_search_page_url() { + + /** + * The s query var must always add to AMP front-page url. for more information see the following function. + * + * @see better_amp_site_url + */ + $front_page_url = true; + + return esc_url( add_query_arg( 's', '', better_amp_site_url( '', '', $front_page_url ) ) ); + } +} + + +if ( ! function_exists( 'better_amp_get_thumbnail' ) ) { + /** + * Used to get thumbnail image for posts with support of default thumbnail image + * + * @param string $thumbnail_size + * @param null $post_id + * + * @since 1.0.0 + * + * @return string + */ + function better_amp_get_thumbnail( $thumbnail_size = 'thumbnail', $post_id = null ) { + + if ( is_null( $post_id ) ) { + $post_id = get_the_ID(); + } + + $thumbnail_id = get_post_thumbnail_id( $post_id ); + + $img = wp_get_attachment_image_src( $thumbnail_id, $thumbnail_size ); + + if ( $img ) { + return array( + 'src' => $img[0], + 'width' => $img[1], + 'height' => $img[2], + ); + } + + $img = array( + 'src' => '', + 'width' => '', + 'height' => '', + ); + + // todo add default thumbnail functionality or extension here + + return $img; + + } // better_amp_get_thumbnail +} // if + + +if ( ! function_exists( 'better_amp_element_uni_id' ) ) { + /** + * Create unique id for element + * + * @since 1.0.0 + * + * @return string + */ + function better_amp_element_uni_id() { + + return uniqid( 'element-' . rand() . '-' ); + } +} + + +if ( ! function_exists( 'better_amp_get_branding_info' ) ) { + /** + * Returns site branding info + * + * @param string $position + * + * @since 1.0.0 + * + * @return array + */ + function better_amp_get_branding_info( $position = 'header' ) { + + if ( $info = better_amp_get_global( $position . '-site-info', false ) ) { + return $info; + } else { + $info = array( + 'logo' => '', + 'logo-tag' => '', + 'sidebar-logo' => '', + 'sidebar-logo-tag' => '', + 'footer-logo' => '', + 'footer-logo-tag' => '', + 'name' => get_bloginfo( 'name', 'display' ), + 'description' => get_bloginfo( 'description', 'display' ), + ); + } + + if ( $name = better_amp_get_option( 'better-amp-' . $position . '-logo-text', false ) ) { + $info['name'] = $name; + } + + if ( $logo = better_amp_get_option( 'better-amp-' . $position . '-logo-img' ) ) { + + $logo = wp_get_attachment_image_src( $logo, 'full' ); + + if ( $logo ) { + $logo = array( + 'src' => $logo[0], + 'width' => $logo[1], + 'height' => $logo[2], + ); + } + + if ( ! empty( $logo['src'] ) ) { + $info['logo'] = $logo; + $info['logo']['alt'] = $info['name'] . ' - ' . $info['description']; + + $info['logo-tag'] = better_amp_create_image( $info['logo'], false ); + } + } + + + better_amp_set_global( $position . '-site-info', $info ); + + return $info; + } +} + + +if ( ! function_exists( 'better_amp_get_option' ) ) { + /** + * Returns option value + * + * @param string $option_key + * @param string $default_value + * + * @since 1.0.0 + * + * @return string + */ + function better_amp_get_option( $option_key = '', $default_value = null ) { + + if ( empty( $option_key ) ) { + return $default_value; + } + + if ( is_null( $default_value ) ) { + $default_value = apply_filters( 'better-amp/template/default-theme-mod', $default_value, $option_key ); + } + + return get_theme_mod( $option_key, $default_value ); + } +} + + +if ( ! function_exists( 'better_amp_get_theme_mod' ) ) { + /** + * Returns saved value of option or default from config + * + * @param $name + * @param bool $check_customize_preview + * + * @since 1.0. + * + * @return bool|string + * @todo remove this function and use better_amp_get_option instead + */ + function better_amp_get_theme_mod( $name, $check_customize_preview = true ) { + + $result = get_theme_mod( $name, better_amp_get_default_theme_setting( $name ) ); + + if ( ! $result && $check_customize_preview ) { + $result = better_amp_is_customize_preview(); + } + + return $result; + } +} + +if ( ! function_exists( 'better_amp_get_server_ip_address' ) ) { + /** + * Handy function for get server ip + * + * @since 1.0.0 + * + * @return string|null ip address on success or null on failure. + */ + function better_amp_get_server_ip_address() { + + // This function is fork of "bf_get_server_ip_address" function and it's better to use + // the main function if that was available. (IF BetterFramework was available) + if ( function_exists( 'bf_get_server_ip_address' ) ) { + return bf_get_server_ip_address(); + } + + global $is_IIS; + + if ( $is_IIS && isset( $_SERVER['LOCAL_ADDR'] ) ) { + $ip = $_SERVER['LOCAL_ADDR']; + } else { + $ip = $_SERVER['SERVER_ADDR']; + } + + //if ( $ip === '::1' || filter_var( $ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE ) !== FALSE ) { + if ( $ip === '::1' || filter_var( $ip, FILTER_VALIDATE_IP ) !== false ) { + return $ip; + } + } +} + + +if ( ! function_exists( 'better_amp_is_localhost' ) ) { + /** + * Utility function to detect is site currently running on localhost? + * + * @since 1.0.0 + * + * @return bool + */ + function better_amp_is_localhost() { + + // This function is fork of "bf_is_localhost" function and it's better to use + // the main function if that was available. (IF BetterFramework was available) + if ( function_exists( 'bf_is_localhost' ) ) { + return bf_is_localhost(); + } + + $server_ip = better_amp_get_server_ip_address(); + $server_ip_long = ip2long( $server_ip ); + + return $server_ip === '::1' || ( $server_ip_long >= 2130706433 && $server_ip_long <= 2147483646 ); + } +} + + +if ( ! function_exists( 'better_amp_human_number_format' ) ) { + /** + * Format number to human friendly style + * + * @param $number + * + * @since 1.0.0 + * + * @return string + */ + function better_amp_human_number_format( $number ) { + + if ( ! is_numeric( $number ) ) { + return $number; + } + + if ( $number >= 1000000 ) { + return round( ( $number / 1000 ) / 1000, 1 ) . "M"; + } elseif ( $number >= 100000 ) { + return round( $number / 1000, 0 ) . "k"; + } else { + return @number_format( $number ); + } + + } +} + + +if ( ! function_exists( 'better_amp_get_archive_title_fields' ) ) { + /** + * Handy function used to get archive pages title fields + * + * @since 1.0.0 + * + * @return array + */ + function better_amp_get_archive_title_fields() { + + $icon = ''; + $pre_title = ''; + $title = ''; + $description = ''; + + if ( function_exists( 'is_woocommerce' ) && is_woocommerce() ) { + + if ( is_product_category() ) { + + $icon = ''; + $pre_title = better_amp_translation_get( 'browsing_product_category' ); + $title = single_term_title( '', false ); + $description = term_description( get_queried_object() ); + + } elseif ( is_product_tag() ) { + + $icon = ''; + $pre_title = better_amp_translation_get( 'browsing_product_tag' ); + $title = single_term_title( '', false ); + $description = term_description( get_queried_object() ); + + } else { + + $icon = ''; + $pre_title = better_amp_translation_get( 'browsing' ); + $title = better_amp_translation_get( 'product-shop' ); + } + + } elseif ( is_category() ) { + + $icon = ''; + $pre_title = better_amp_translation_get( 'browsing_category' ); + $title = single_cat_title( '', false ); + $description = category_description(); + + } elseif ( is_tag() ) { + + $icon = ''; + $pre_title = better_amp_translation_get( 'browsing_tag' ); + $title = single_tag_title( '', false ); + $description = tag_description(); + + } elseif ( is_author() ) { + + $icon = ''; + $pre_title = better_amp_translation_get( 'browsing_author' ); + $title = '' . get_the_author() . ''; + $description = get_the_author_meta( 'description' ); + + } elseif ( is_year() ) { + + $icon = ''; + $pre_title = better_amp_translation_get( 'browsing_yearly' ); + $title = get_the_date( _x( 'Y', 'yearly archives date format', 'better-amp' ) ); + + } elseif ( is_month() ) { + + $icon = ''; + $pre_title = better_amp_translation_get( 'browsing_monthly' ); + $title = get_the_date( _x( 'F Y', 'monthly archives date format', 'better-amp' ) ); + + } elseif ( is_day() ) { + + $icon = ''; + $pre_title = better_amp_translation_get( 'browsing_daily' ); + $title = get_the_date( _x( 'F j, Y', 'daily archives date format', 'better-amp' ) ); + + } elseif ( is_tax( 'post_format' ) ) { + + if ( is_tax( 'post_format', 'post-format-aside' ) ) { + + $icon = ''; + $pre_title = better_amp_translation_get( 'browsing_archive' ); + $title = better_amp_translation_get( 'asides' ); + + } elseif ( is_tax( 'post_format', 'post-format-gallery' ) ) { + + $icon = ''; + $pre_title = better_amp_translation_get( 'browsing_archive' ); + $title = better_amp_translation_get( 'galleries' ); + + } elseif ( is_tax( 'post_format', 'post-format-image' ) ) { + + $icon = ''; + $pre_title = better_amp_translation_get( 'browsing_archive' ); + $title = better_amp_translation_get( 'images' ); + + } elseif ( is_tax( 'post_format', 'post-format-video' ) ) { + + $icon = ''; + $pre_title = better_amp_translation_get( 'browsing_archive' ); + $title = better_amp_translation_get( 'videos' ); + + } elseif ( is_tax( 'post_format', 'post-format-quote' ) ) { + + $icon = ''; + $pre_title = better_amp_translation_get( 'browsing_archive' ); + $title = better_amp_translation_get( 'quotes' ); + + } elseif ( is_tax( 'post_format', 'post-format-link' ) ) { + + $icon = ''; + $pre_title = better_amp_translation_get( 'browsing_archive' ); + $title = better_amp_translation_get( 'links' ); + + } elseif ( is_tax( 'post_format', 'post-format-status' ) ) { + + $icon = ''; + $pre_title = better_amp_translation_get( 'browsing_archive' ); + $title = better_amp_translation_get( 'statuses' ); + + } elseif ( is_tax( 'post_format', 'post-format-audio' ) ) { + + $icon = ''; + $pre_title = better_amp_translation_get( 'browsing_archive' ); + $title = better_amp_translation_get( 'audio' ); + + } elseif ( is_tax( 'post_format', 'post-format-chat' ) ) { + + $icon = ''; + $pre_title = better_amp_translation_get( 'browsing_archive' ); + $title = better_amp_translation_get( 'chats' ); + } + + } elseif ( is_post_type_archive() ) { + + $icon = ''; + $pre_title = better_amp_translation_get( 'browsing_archive' ); + $title = post_type_archive_title( '', false ); + $description = function_exists( 'get_the_post_type_description' ) ? + get_the_post_type_description() : ''; + } elseif ( is_tax() ) { + + $tax = get_taxonomy( get_queried_object()->taxonomy ); + $icon = ''; + $pre_title = better_amp_translation_get( 'browsing_archive' ); + $title = sprintf( __( '%1$s: %2$s', 'beetter-amp' ), $tax->labels->singular_name, single_term_title( '', false ) ); + $description = term_description(); + + } else { + + $icon = ''; + $pre_title = better_amp_translation_get( 'browsing' ); + $title = better_amp_translation_get( 'archive' ); + } + + return compact( 'icon', 'pre_title', 'title', 'description' ); + } +} + + +if ( ! function_exists( 'better_amp_post_classes' ) ) { + /** + * Handy function to generate class attribute for posts + * + * @param string|array $append One or more classes to add to the class list. + * + * @since 1.0.0 + * + */ + function better_amp_post_classes( $append = '' ) { + + $class = get_post_class( $append ); + + if ( ! has_post_thumbnail() ) { + $class[] = 'no-thumbnail'; + } else { + $class[] = 'have-thumbnail'; + } + + $class[] = 'clearfx'; + + $class = str_replace( 'hentry', '', join( ' ', $class ) ); + + echo 'class="' . $class . '"'; + + unset( $class ); + } +} + + +if ( ! function_exists( 'better_amp_post_subtitle' ) ) { + /** + * Post subtitle. + * + * Supports + * "BetterStudio" Themes + * "WP Subtitle" plugin + * + * @since 1.0.0 + */ + function better_amp_post_subtitle() { + + if ( function_exists( 'publisher_the_subtitle' ) ) { + publisher_the_subtitle( '
    ', '
    ' ); + } elseif ( function_exists( 'the_subtitle' ) ) { + the_subtitle( '
    ', '
    ' ); + } + + } +} + + +if ( ! function_exists( 'better_amp_social_share_fetch_count' ) ) { + /** + * Fetches share count for URL + * + * @param $site_id + * @param $url + * + * @since 1.0.0 + * + * @return int + */ + function better_amp_social_share_fetch_count( $site_id, $url ) { + + // This function is fork of "bf_social_share_fetch_count" function and it's better to use + // the main function if that was available. (IF BetterFramework was available) + if ( function_exists( 'bf_social_share_fetch_count' ) ) { + return bf_social_share_fetch_count( $site_id, $url ); + } + + $count = 0; + $remote_args = array( + 'sslverify' => false + ); + + switch ( $site_id ) { + + case 'facebook': + $remote = wp_remote_get( 'http://graph.facebook.com/?fields=og_object{id},share&id=' . $url, $remote_args ); + + if ( ! is_wp_error( $remote ) ) { + + $response = json_decode( wp_remote_retrieve_body( $remote ), true ); + + if ( isset( $response['share']['share_count'] ) ) { + $count = $response['share']['share_count']; + } + + } + + + break; + + case 'twitter': + + $remote = wp_remote_get( 'http://public.newsharecounts.com/count.json?callback=&url=' . $url, $remote_args ); + + if ( ! is_wp_error( $remote ) ) { + + $response = json_decode( wp_remote_retrieve_body( $remote ), true ); + + if ( isset( $response['count'] ) ) { + $count = $response['count']; + } + + } + + break; + + case 'google_plus': + $post_data = '[{"method":"pos.plusones.get","id":"p","params":{"nolog":true,"id":"' . rawurldecode( $url ) . '","source":"widget","userId":"@viewer","groupId":"@self"},"jsonrpc":"2.0","key":"p","apiVersion":"v1"}]'; + + $remote = wp_remote_post( 'https://clients6.google.com/rpc', array( + 'body' => $post_data, + 'headers' => 'Content-type: application/json', + 'sslverify' => false, + ) ); + + if ( ! is_wp_error( $remote ) ) { + + $response = json_decode( wp_remote_retrieve_body( $remote ), true ); + + if ( isset( $response[0]['result']['metadata']['globalCounts']['count'] ) ) { + $count = $response[0]['result']['metadata']['globalCounts']['count']; + } + + } + + break; + + case 'pinterest': + $remote = wp_remote_get( 'http://api.pinterest.com/v1/urls/count.json?callback=CALLBACK&url=' . $url, $remote_args ); + + if ( ! is_wp_error( $remote ) ) { + + if ( preg_match( '/^\s*CALLBACK\s*\((.+)\)\s*$/', wp_remote_retrieve_body( $remote ), $match ) ) { + $response = json_decode( $match[1], true ); + + if ( isset( $response['count'] ) ) { + $count = $response['count']; + } + } + + } + + break; + + case 'linkedin': + $remote = wp_remote_get( 'https://www.linkedin.com/countserv/count/share?format=json&url=' . $url, $remote_args ); + + if ( ! is_wp_error( $remote ) ) { + + $response = json_decode( wp_remote_retrieve_body( $remote ), true ); + + if ( isset( $response['count'] ) ) { + $count = $response['count']; + } + + } + + break; + + case 'tumblr': + $remote = wp_remote_get( 'http://api.tumblr.com/v2/share/stats?url=' . $url, $remote_args ); + + if ( ! is_wp_error( $remote ) ) { + + $response = json_decode( wp_remote_retrieve_body( $remote ), true ); + + if ( isset( $response['response']['note_count'] ) ) { + $count = $response['response']['note_count']; + } + + } + + break; + + + case 'reddit': + $remote = wp_remote_get( 'http://www.reddit.com/api/info.json?url=' . $url, $remote_args ); + + if ( ! is_wp_error( $remote ) ) { + + $response = json_decode( $remote['body'], true ); + + if ( isset( $response['data']['children']['0']['data']['score'] ) ) { + $count = $response['data']['children']['0']['data']['score']; + } + + } + + break; + + case 'stumbleupon': + $remote = wp_remote_get( 'http://www.stumbleupon.com/services/1.01/badge.getinfo?url=' . $url, $remote_args ); + + if ( ! is_wp_error( $remote ) ) { + + $response = json_decode( $remote['body'], true ); + + if ( isset( $response['result']['views'] ) ) { + $count = $response['result']['views']; + } + + } + + + break; + + } + + return $count; + } // better_amp_social_share_fetch_count +} + + +if ( ! function_exists( 'better_amp_social_shares_count' ) ) { + /** + * Returns all social share count for post. + * + * @param $sites + * + * @since 1.0.0 + * + * @return array|mixed|void + */ + function better_amp_social_shares_count( $sites ) { + + // This function is fork of "bf_social_shares_count" function and it's better to use + // the main function if that was available. (IF BetterFramework was available) + if ( function_exists( 'bf_social_share_fetch_count' ) ) { + return bf_social_shares_count( $sites ); + } + + $sites = array_intersect_key( $sites, array( + // Valid sites + 'facebook' => '', + 'twitter' => '', + 'google_plus' => '', + 'pinterest' => '', + 'linkedin' => '', + 'tumblr' => '', + 'reddit' => '', + 'stumbleupon' => '', + ) ); + + // Disable social share in localhost + if ( better_amp_is_localhost() ) { + return array(); + } + + $post_id = get_queried_object_id(); + $expired = (int) get_post_meta( $post_id, 'bs_social_share_interval', true ); + $results = array(); + + $update_cache = false; + + if ( $expired < time() ) { + $update_cache = true; + } else { + + // get count from cache storage + foreach ( $sites as $site_id => $is_active ) { + if ( ! $is_active ) { + continue; + } + + $count_number = get_post_meta( $post_id, 'bs_social_share_' . $site_id, true ); + $update_cache = $count_number === ''; + + if ( $update_cache ) { + break; + } + + $results[ $site_id ] = $count_number; + } + } + + if ( $update_cache ) { // Update cache storage if needed + $current_page = better_amp_social_share_guss_current_page(); + + foreach ( $sites as $site_id => $is_active ) { + if ( ! $is_active ) { + continue; + } + + $count_number = better_amp_social_share_fetch_count( $site_id, $current_page['page_permalink'] ); + + update_post_meta( $post_id, 'bs_social_share_' . $site_id, $count_number ); + + $results[ $site_id ] = $count_number; + } + + /** + * + * This filter can be used to change share count time. + * + */ + $cache_time = apply_filters( 'bs-social-share/cache-time', MINUTE_IN_SECONDS * 120, $post_id ); + + update_post_meta( $post_id, 'bs_social_share_interval', time() + $cache_time ); + } + + return apply_filters( 'bs-social-share/shares-count', $results ); + } // better_amp_social_shares_count +} + + +if ( ! function_exists( 'better_amp_social_share_guss_current_page' ) ) { + /** + * Detects and returns current page info for social share + * + * @since 1.0.0 + * + * @return array + */ + function better_amp_social_share_guss_current_page() { + + $page_permalink = ''; + $need_short_link = better_amp_get_theme_mod( 'better-amp-post-social-share-link-format' ) === 'short'; + + if ( is_home() || is_front_page() ) { + $page_title = get_bloginfo( 'name' ); + } elseif ( is_single( get_the_ID() ) && ! ( is_front_page() ) ) { + $page_title = get_the_title(); + + if ( $need_short_link ) { + $page_permalink = wp_get_shortlink(); + } + + } elseif ( is_page() ) { + $page_title = get_the_title(); + + if ( $need_short_link ) { + $page_permalink = wp_get_shortlink(); + } + + } elseif ( is_category() || is_tag() || is_tax() ) { + $page_title = single_term_title( '', false ); + + if ( $need_short_link ) { + + $queried_object = get_queried_object(); + + if ( ! empty( $queried_object->taxonomy ) ) { + + if ( 'category' == $queried_object->taxonomy ) { + $page_permalink = "?cat=$queried_object->term_id"; + } else { + $tax = get_taxonomy( $queried_object->taxonomy ); + + if ( $tax->query_var ) { + $page_permalink = "?$tax->query_var=$queried_object->slug"; + } else { + $page_permalink = "?taxonomy=$queried_object->taxonomy&term=$queried_object->term_id"; + } + } + + $page_permalink = home_url( $page_permalink ); + } + } + + } else { + $page_title = get_bloginfo( 'name' ); + } + + if ( ! $page_permalink ) { + $page_permalink = better_amp_guess_none_amp_url(); + } + + return compact( 'page_title', 'page_permalink' ); + } +} + + +if ( ! function_exists( 'better_amp_social_share_get_li' ) ) { + /** + * Used for generating lis for social share list + * + * @param string $id + * @param bool $show_title + * @param int $count_label + * + * @since 1.0.0 + * + * @return string + */ + function better_amp_social_share_get_li( $id = '', $show_title = true, $count_label = 0 ) { + + if ( empty( $id ) ) { + return ''; + } + + static $initialized; + static $page_title; + static $page_permalink; + + wp_reset_postdata(); // fix for after other loops + + if ( is_null( $initialized ) ) { + $cur_page = better_amp_social_share_guss_current_page(); + $page_title = rawurlencode( esc_attr( $cur_page['page_title'] ) ); + $page_permalink = urlencode( $cur_page['page_permalink'] ); + $initialized = true; + } + + switch ( $id ) { + + case 'facebook': + $link = 'https://www.facebook.com/sharer.php?u=' . $page_permalink; + $title = __( 'Facebook', 'better-amp' ); + $icon = ''; + break; + + case 'twitter': + + $by = ''; + if ( class_exists( 'Better_Social_Counter' ) ) { + $by = Better_Social_Counter::get_option( 'twitter_username' ); + + if ( $by === 'BetterSTU' && ! class_exists( 'BS_Demo_Helper' ) ) { + $by = ''; + } + + if ( ! empty( $by ) ) { + $by = ' @' . $by; + } else { + $by = ''; + } + } + + $link = 'https://twitter.com/share?text=' . $page_title . $by . '&url=' . $page_permalink; + $title = __( 'Twitter', 'better-amp' ); + $icon = ''; + break; + + case 'google_plus': + $link = 'https://plus.google.com/share?url=' . $page_permalink; + $title = __( 'Google+', 'better-amp' ); + $icon = ''; + break; + + case 'pinterest': + $_img_src = wp_get_attachment_image_src( get_post_thumbnail_id(), 'full' ); + $link = 'https://pinterest.com/pin/create/button/?url=' . $page_permalink . '&media=' . $_img_src[0] . '&description=' . $page_title; + $title = __( 'Pinterest', 'better-amp' ); + $icon = ''; + break; + + case 'linkedin': + $link = 'https://www.linkedin.com/shareArticle?mini=true&url=' . $page_permalink . '&title=' . $page_title; + $title = __( 'Linkedin', 'better-amp' ); + $icon = ''; + break; + + case 'tumblr': + $link = 'https://www.tumblr.com/share/link?url=' . $page_permalink . '&name=' . $page_title; + $title = __( 'Tumblr', 'better-amp' ); + $icon = ''; + break; + + case 'email': + $link = "mailto:?subject=" . $page_title . "&body=" . $page_permalink; + $title = __( 'Email', 'better-amp' ); + $icon = ''; + break; + + case 'telegram': + $link = 'https://telegram.me/share/url?url=' . $page_permalink . '&text=' . $page_title; + $title = __( 'Telegram', 'better-amp' ); + $icon = ''; + break; + + case 'whatsapp': + $link = 'whatsapp://send?text=' . $page_title . ' %0A%0A ' . $page_permalink; + $title = __( 'WhatsApp', 'better-amp' ); + $icon = ''; + break; + + case 'digg': + $link = 'https://www.digg.com/submit?url=' . $page_permalink; + $title = __( 'Digg', 'better-amp' ); + $icon = ''; + break; + + case 'reddit': + $link = 'https://reddit.com/submit?url=' . $page_permalink . '&title=' . $page_title; + $title = __( 'ReddIt', 'better-amp' ); + $icon = ''; + break; + + case 'stumbleupon': + $link = 'https://www.stumbleupon.com/submit?url=' . $page_permalink . '&title=' . $page_title; + $title = __( 'StumbleUpon', 'better-amp' ); + $icon = ''; + break; + + case 'vk': + $link = 'https://vkontakte.ru/share.php?url=' . $page_permalink; + $title = __( 'VK', 'better-amp' ); + $icon = ''; + break; + + default: + return ''; + } + + $extra_classes = $count_label ? ' has-count' : ''; + $output = '
  • '; + + $output .= $icon; + + if ( $show_title ) { + $output .= '' . wp_kses( $title, bf_trans_allowed_html() ) . ''; + } + + if ( $count_label ) { + $output .= sprintf( '%s', better_amp_human_number_format( $count_label ) ); + } + + $output .= '
  • '; + + return $output; + + }// better_amp_social_share_get_li +}// if + + +if ( ! function_exists( 'better_amp_is_customize_preview' ) ) { + /** + * Handy function customizer preview state for current page + * + * @since 1.0.0 + * + * @return bool + */ + function better_amp_is_customize_preview() { + + static $is_customizer; + + if ( is_null( $is_customizer ) ) { + $is_customizer = is_customize_preview(); + } + + return $is_customizer; + } +} + + +if ( ! function_exists( 'better_amp_customizer_hidden_attr' ) ) { + /** + * Helper for customizer preview + * + * @param $theme_mod + * + * @since 1.0.0 + * + */ + function better_amp_customizer_hidden_attr( $theme_mod ) { + + if ( better_amp_is_customize_preview() && ! better_amp_get_theme_mod( $theme_mod, false ) ) { + echo ' style="display:none"'; + } + } +} + +if ( ! function_exists( 'better_amp_language_attributes' ) ) { + /** + * Gets the language attributes for the html tag. + * + * @since 1.0.0 + */ + function better_amp_language_attributes() { + + $attributes = array(); + + if ( function_exists( 'is_rtl' ) && is_rtl() ) { + $attributes[] = 'dir="rtl"'; + } + + if ( $lang = get_bloginfo( 'language' ) ) { + $attributes[] = "lang=\"$lang\""; + + } + + $output = implode( ' ', $attributes ); + + echo $output; + } +} + +if ( ! function_exists( 'better_amp_get_post_parent' ) ) { + /** + * Get post parent + * + * @param int $attachment_id + * + * @since 1.1 + * @return bool|WP_Post WP_Post on success or false on failure + */ + function better_amp_get_post_parent( $attachment_id = null ) { + + if ( empty( $attachment_id ) && isset( $GLOBALS['post'] ) ) { + $attachment = $GLOBALS['post']; + } else { + $attachment = get_post( $attachment_id ); + } + + // Validate attachment + if ( ! $attachment || is_wp_error( $attachment ) ) { + return false; + } + + $parent = false; + + if ( ! empty( $attachment->post_parent ) ) { + $parent = get_post( $attachment->post_parent ); + if ( ! $parent || is_wp_error( $parent ) ) { + $parent = false; + } + } + + return $parent; + } +} + +if ( ! function_exists( 'better_amp_is_static_home_page' ) ) { + /** + * Is current page static home page + * + * @since 1.2.4 + * @return bool true on success or false on failure + */ + function better_amp_is_static_home_page() { + + return is_home() && apply_filters( 'better-amp/template/show-on-front', 'posts' ) === 'page' && + apply_filters( 'better-amp/template/page-on-front', 0 ); + } +} + +if ( ! function_exists( 'better_amp_comments_template' ) ) { + /** + * Retrieves comments template path in the current or parent template. + * + * @since 1.5.0 + */ + function better_amp_comments_template() { + + better_amp_locate_template( 'comments.php', true ); + } +} + +if ( ! function_exists( 'better_amp_list_comments' ) ) { + /** + * List comments for a particular post. + * + * @param string|array $args wp_list_comments first argument + * @param array $comment_query_args comment query arguments + * + * @since 1.5.0 + * + * @return string|void + * @see wp_list_comments for more documentation + * + * @global WP_Query $wp_query Global WP_Query instance. + */ + function better_amp_list_comments( $args = array(), $comment_query_args = array() ) { + + global $wp_query; + + $post_id = get_the_ID(); + + $comment_args = array( + 'orderby' => 'comment_date_gmt', + 'order' => 'ASC', + 'status' => 'approve', + 'post_id' => $post_id, + 'no_found_rows' => false, + ); + + if ( empty( $args['callback'] ) && better_amp_locate_template( 'comment-item.php' ) ) { + $args['callback'] = 'better_amp_comment_item'; + $args['end-callback'] = 'better_amp_comment_item_end'; + } + + $comments = new WP_Comment_Query( array_merge( $comment_args, $comment_query_args ) ); + + /** + * Filters the comments array. + * + * @param array $comments Array of comments supplied to the comments template. + * @param int $post_ID Post ID. + * + * @see comments_template + * + */ + $comments_list = apply_filters( 'comments_array', $comments->comments, $post_id ); + + // Save comments list to comments property of the main query to enable wordpress core + // function such as get_next_comments_link works in comments page + $wp_query->comments = $comments_list; + + return wp_list_comments( $args ); + } +} + +if ( ! function_exists( 'better_amp_comments_paginate' ) ) { + /** + * Displays pagination links for the comments on the current post. + * + * @since 1.5.0 + * + * @see wp_list_comments for more documentation + * + */ + function better_amp_comments_paginate() { + + // Nav texts with RTL support + if ( is_rtl() ) { + $prev = ' ' . better_amp_translation_get( 'comment_previous' ); + $next = better_amp_translation_get( 'comment_next' ) . ' '; + } else { + $next = better_amp_translation_get( 'comment_next' ) . ' '; + $prev = ' ' . better_amp_translation_get( 'comment_previous' ); + } + + previous_comments_link( $prev ); + + next_comments_link( $next ); + } +} + + +if ( ! function_exists( 'better_amp_comment_item' ) ) { + + /** + * Load comment-item.php file in the current or parent template. + * + * @param WP_Comment_Query $comment + * + * @since 1.5.0 + * + */ + function better_amp_comment_item( $comment ) { + + static $path; + + if ( is_null( $path ) ) { + $path = better_amp_locate_template( 'comment-item.php' ); + } + + if ( $path ) { + include $path; + } + } +} + + +if ( ! function_exists( 'better_amp_comment_item_end' ) ) { + /** + * Print li closing tag + * + * @since 1.5.0 + */ + function better_amp_comment_item_end() { + + echo ''; + } +} + + +if ( ! function_exists( 'better_amp_related_posts_query_args' ) ) { + /** + * Get Related Posts + * + * @param integer $count number of posts to return + * @param string $type + * @param integer|null $post_id + * @param array $params query extra arguments + * + * @return array query args array + */ + function better_amp_related_posts_query_args( $count = 5, $type = 'cat', $post_id = null, $params = array() ) { + + $post = get_post( $post_id ); + + if ( ! $post_id && isset( $post->ID ) ) { + $post_id = $post->ID; + } + + $args = array( + 'posts_per_page' => $count, + 'post__not_in' => array( $post_id ), + 'ignore_sticky_posts' => true, + ); + + switch ( $type ) { + + case 'cat': + $args['category__in'] = wp_get_post_categories( $post_id ); + break; + + case 'tag': + $tag_in = wp_get_object_terms( $post_id, 'post_tag', array( 'fields' => 'ids' ) ); + if ( $tag_in && ! is_wp_error( $tag_in ) ) { + + $args['tag__in'] = $tag_in; + } + break; + + case 'author': + if ( isset( $post->post_author ) ) { + $args['author'] = $post->post_author; + } + break; + + case 'cat-tag': + $args['category__in'] = wp_get_post_categories( $post_id ); + $args['tag__in'] = wp_get_object_terms( $post_id, 'post_tag', array( 'fields' => 'ids' ) ); + break; + + case 'cat-tag-author': + $args['category__in'] = wp_get_post_categories( $post_id ); + + if ( isset( $post->post_author ) ) { + $args['author'] = $post->post_author; + } + + $tag_in = wp_get_object_terms( $post_id, 'post_tag', array( 'fields' => 'ids' ) ); + + if ( $tag_in && ! is_wp_error( $tag_in ) ) { + $args['tag__in'] = $tag_in; + } + break; + + case 'rand': + case 'random': + case 'randomly': + $args['orderby'] = 'rand'; + break; + + } + + if ( $params ) { + $args = array_merge( $args, $params ); + } + + return $args; + + } // better_amp_related_posts_query_args +} // if + + +if ( ! function_exists( 'better_amp_min_suffix' ) ) { + /** + * Returns appropriate suffix for static files (min or not) + * + * @param string $before + * @param string $after + * + * @return string + */ + function better_amp_min_suffix( $before = '', $after = '' ) { + + static $suffix; + + if ( ! $suffix ) { + if ( ( defined( 'WP_DEBUG' ) && WP_DEBUG ) || ( defined( 'BF_DEV_MODE' ) && BF_DEV_MODE ) ) { + $suffix = ''; + } else { + $suffix = '.min'; + } + } + + return "$before$suffix$after"; + } +} + +if ( ! function_exists( 'better_amp_url_format' ) ) { + + /** + * Get the structure url of AMP pages permalink. + * + * @since 1.8.3 + * @return string start-point or end-pint + */ + function better_amp_url_format() { + + return apply_filters( 'better-amp/url/format', 'start-point' ); + } +} + +if ( ! function_exists( 'better_amp_excluded_urls_format' ) ) { + + /** + * Get list of url paths which is not available in AMP version. + * + * @since 1.9.8 + * @return array + */ + function better_amp_excluded_urls_format() { + + return apply_filters( 'better-amp/url/excluded', array() ); + } +} + + +add_action( 'registered_post_type', 'better_amp_collect_post_type_slugs', 8, 2 ); + +if ( ! function_exists( 'better_amp_collect_post_type_slugs' ) ) { + + /** + * Collect list of custom post type rewrite slug. + * + * @param string $post_type + * @param WP_Post_Type $post_type_object + * + * @since 1.9.11 + * + * @see better_amp_site_url + */ + function better_amp_collect_post_type_slugs( $post_type, $post_type_object ) { + + global $better_amp_post_type_slugs; + + if ( ! empty( $post_type_object->rewrite['slug'] ) ) { + + $better_amp_post_type_slugs[ $post_type ] = $post_type_object->rewrite['slug']; + } + } } \ No newline at end of file