<?php /** * Main theme functions. * * @package GeneratePress */ if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. } /** * A wrapper function to get our options. * * @since 2.2 * * @param string $option The option name to look up. * @return string The option value. */ function generate_get_option( $option ) { $defaults = generate_get_defaults(); if ( ! isset( $defaults[ $option ] ) ) { return; } $options = wp_parse_args( get_option( 'generate_settings', array() ), $defaults ); return $options[ $option ]; } if ( ! function_exists( 'generate_get_layout' ) ) { /** * Get the layout for the current page. * * @since 0.1 * * @return string The sidebar layout location. */ function generate_get_layout() { $layout = generate_get_option( 'layout_setting' ); if ( is_single() ) { $layout = generate_get_option( 'single_layout_setting' ); } if ( is_singular() ) { $layout_meta = get_post_meta( get_the_ID(), '_generate-sidebar-layout-meta', true ); if ( $layout_meta ) { $layout = $layout_meta; } } if ( is_home() || is_archive() || is_search() || is_tax() ) { $layout = generate_get_option( 'blog_layout_setting' ); } return apply_filters( 'generate_sidebar_layout', $layout ); } } if ( ! function_exists( 'generate_get_footer_widgets' ) ) { /** * Get the footer widgets for the current page * * @since 0.1 * * @return int The number of footer widgets. */ function generate_get_footer_widgets() { $widgets = generate_get_option( 'footer_widget_setting' ); if ( is_singular() ) { $widgets_meta = get_post_meta( get_the_ID(), '_generate-footer-widget-meta', true ); if ( $widgets_meta || '0' === $widgets_meta ) { $widgets = $widgets_meta; } } return apply_filters( 'generate_footer_widgets', $widgets ); } } if ( ! function_exists( 'generate_show_excerpt' ) ) { /** * Figure out if we should show the blog excerpts or full posts * @since 1.3.15 */ function generate_show_excerpt() { global $post; // Check to see if the more tag is being used. $more_tag = apply_filters( 'generate_more_tag', strpos( $post->post_content, '<!--more-->' ) ); $format = ( false !== get_post_format() ) ? get_post_format() : 'standard'; $show_excerpt = ( 'excerpt' === generate_get_option( 'post_content' ) ) ? true : false; $show_excerpt = ( 'standard' !== $format ) ? false : $show_excerpt; $show_excerpt = ( $more_tag ) ? false : $show_excerpt; $show_excerpt = ( is_search() ) ? true : $show_excerpt; return apply_filters( 'generate_show_excerpt', $show_excerpt ); } } if ( ! function_exists( 'generate_show_title' ) ) { /** * Check to see if we should show our page/post title or not. * * @since 1.3.18 * * @return bool Whether to show the content title. */ function generate_show_title() { return apply_filters( 'generate_show_title', true ); } } if ( ! function_exists( 'generate_get_premium_url' ) ) { /** * Generate a URL to our premium add-ons. * Allows the use of a referral ID and campaign. * * @since 1.3.42 * * @param string $url URL to premium page. * @param bool $trailing_slash Whether we want to include a trailing slash. * @return string The URL to generatepress.com. */ function generate_get_premium_url( $url = 'https://generatepress.com/premium', $trailing_slash = true ) { if ( $trailing_slash ) { $url = trailingslashit( $url ); } $args = apply_filters( 'generate_premium_url_args', array( 'ref' => null, 'campaign' => null, ) ); if ( isset( $args['ref'] ) ) { $url = add_query_arg( 'ref', absint( $args['ref'] ), $url ); } if ( isset( $args['campaign'] ) ) { $url = add_query_arg( 'campaign', sanitize_text_field( $args['campaign'] ), $url ); } return esc_url( $url ); } } if ( ! function_exists( 'generate_padding_css' ) ) { /** * Shorten our padding/margin values into shorthand form. * * @since 0.1 * * @param int $top Top spacing. * @param int $right Right spacing. * @param int $bottom Bottom spacing. * @param int $left Left spacing. * @return string Element spacing values. */ function generate_padding_css( $top, $right, $bottom, $left ) { $padding_top = ( isset( $top ) && '' !== $top ) ? absint( $top ) . 'px ' : '0px '; $padding_right = ( isset( $right ) && '' !== $right ) ? absint( $right ) . 'px ' : '0px '; $padding_bottom = ( isset( $bottom ) && '' !== $bottom ) ? absint( $bottom ) . 'px ' : '0px '; $padding_left = ( isset( $left ) && '' !== $left ) ? absint( $left ) . 'px' : '0px'; if ( ( absint( $padding_top ) === absint( $padding_right ) ) && ( absint( $padding_right ) === absint( $padding_bottom ) ) && ( absint( $padding_bottom ) === absint( $padding_left ) ) ) { return $padding_left; } return $padding_top . $padding_right . $padding_bottom . $padding_left; } } if ( ! function_exists( 'generate_get_link_url' ) ) { /** * Return the post URL. * * Falls back to the post permalink if no URL is found in the post. * * @since 1.2.5 * * @see get_url_in_content() * @return string The Link format URL. */ function generate_get_link_url() { $has_url = get_url_in_content( get_the_content() ); return $has_url ? $has_url : apply_filters( 'the_permalink', get_permalink() ); } } if ( ! function_exists( 'generate_get_navigation_location' ) ) { /** * Get the location of the navigation and filter it. * * @since 1.3.41 * * @return string The primary menu location. */ function generate_get_navigation_location() { return apply_filters( 'generate_navigation_location', generate_get_option( 'nav_position_setting' ) ); } } /** * Check if the logo and site branding are active. * * @since 2.3 */ function generate_has_logo_site_branding() { if ( get_theme_mod( 'custom_logo' ) && ( ! generate_get_option( 'hide_title' ) || ! generate_get_option( 'hide_tagline' ) ) ) { return true; } return false; } /** * Create SVG icons. * * @since 2.3 */ function generate_get_svg_icon( $icon, $replace = false ) { if ( 'svg' !== generate_get_option( 'icons' ) ) { return; } $output = ''; if ( 'menu-bars' === $icon ) { $output = '<svg viewBox="0 0 512 512" aria-hidden="true" role="img" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1em" height="1em"> <path d="M0 96c0-13.255 10.745-24 24-24h464c13.255 0 24 10.745 24 24s-10.745 24-24 24H24c-13.255 0-24-10.745-24-24zm0 160c0-13.255 10.745-24 24-24h464c13.255 0 24 10.745 24 24s-10.745 24-24 24H24c-13.255 0-24-10.745-24-24zm0 160c0-13.255 10.745-24 24-24h464c13.255 0 24 10.745 24 24s-10.745 24-24 24H24c-13.255 0-24-10.745-24-24z" /> </svg>'; } if ( 'close' === $icon ) { $output = '<svg viewBox="0 0 512 512" aria-hidden="true" role="img" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1em" height="1em"> <path d="M71.029 71.029c9.373-9.372 24.569-9.372 33.942 0L256 222.059l151.029-151.03c9.373-9.372 24.569-9.372 33.942 0 9.372 9.373 9.372 24.569 0 33.942L289.941 256l151.03 151.029c9.372 9.373 9.372 24.569 0 33.942-9.373 9.372-24.569 9.372-33.942 0L256 289.941l-151.029 151.03c-9.373 9.372-24.569 9.372-33.942 0-9.372-9.373-9.372-24.569 0-33.942L222.059 256 71.029 104.971c-9.372-9.373-9.372-24.569 0-33.942z" /> </svg>'; } if ( 'search' === $icon ) { $output = '<svg viewBox="0 0 512 512" aria-hidden="true" role="img" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1em" height="1em"> <path fill-rule="evenodd" clip-rule="evenodd" d="M208 48c-88.366 0-160 71.634-160 160s71.634 160 160 160 160-71.634 160-160S296.366 48 208 48zM0 208C0 93.125 93.125 0 208 0s208 93.125 208 208c0 48.741-16.765 93.566-44.843 129.024l133.826 134.018c9.366 9.379 9.355 24.575-.025 33.941-9.379 9.366-24.575 9.355-33.941-.025L337.238 370.987C301.747 399.167 256.839 416 208 416 93.125 416 0 322.875 0 208z"/> </svg>'; } if ( 'categories' === $icon ) { $output = '<svg viewBox="0 0 512 512" aria-hidden="true" role="img" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1em" height="1em"> <path d="M0 112c0-26.51 21.49-48 48-48h110.014a48 48 0 0 1 43.592 27.907l12.349 26.791A16 16 0 0 0 228.486 128H464c26.51 0 48 21.49 48 48v224c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V112z" fill-rule="nonzero"/> </svg>'; } if ( 'tags' === $icon ) { $output = '<svg viewBox="0 0 512 512" aria-hidden="true" role="img" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1em" height="1em"> <path d="M20 39.5c-8.836 0-16 7.163-16 16v176c0 4.243 1.686 8.313 4.687 11.314l224 224c6.248 6.248 16.378 6.248 22.626 0l176-176c6.244-6.244 6.25-16.364.013-22.615l-223.5-224A15.999 15.999 0 0 0 196.5 39.5H20zm56 96c0-13.255 10.745-24 24-24s24 10.745 24 24-10.745 24-24 24-24-10.745-24-24z"/> <path d="M259.515 43.015c4.686-4.687 12.284-4.687 16.97 0l228 228c4.686 4.686 4.686 12.284 0 16.97l-180 180c-4.686 4.687-12.284 4.687-16.97 0-4.686-4.686-4.686-12.284 0-16.97L479.029 279.5 259.515 59.985c-4.686-4.686-4.686-12.284 0-16.97z" fill-rule="nonzero"/> </svg>'; } if ( 'comments' === $icon ) { $output = '<svg viewBox="0 0 512 512" aria-hidden="true" role="img" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1em" height="1em"> <path d="M132.838 329.973a435.298 435.298 0 0 0 16.769-9.004c13.363-7.574 26.587-16.142 37.419-25.507 7.544.597 15.27.925 23.098.925 54.905 0 105.634-15.311 143.285-41.28 23.728-16.365 43.115-37.692 54.155-62.645 54.739 22.205 91.498 63.272 91.498 110.286 0 42.186-29.558 79.498-75.09 102.828 23.46 49.216 75.09 101.709 75.09 101.709s-115.837-38.35-154.424-78.46c-9.956 1.12-20.297 1.758-30.793 1.758-88.727 0-162.927-43.071-181.007-100.61z" fill-rule="nonzero"/> <path d="M383.371 132.502c0 70.603-82.961 127.787-185.216 127.787-10.496 0-20.837-.639-30.793-1.757-38.587 40.093-154.424 78.429-154.424 78.429s51.63-52.472 75.09-101.67c-45.532-23.321-75.09-60.619-75.09-102.79C12.938 61.9 95.9 4.716 198.155 4.716 300.41 4.715 383.37 61.9 383.37 132.502z" fill-rule="nonzero" /> </svg>'; } if ( 'arrow' === $icon ) { $output = '<svg viewBox="0 0 330 512" aria-hidden="true" role="img" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1em" height="1em"> <path d="M305.913 197.085c0 2.266-1.133 4.815-2.833 6.514L171.087 335.593c-1.7 1.7-4.249 2.832-6.515 2.832s-4.815-1.133-6.515-2.832L26.064 203.599c-1.7-1.7-2.832-4.248-2.832-6.514s1.132-4.816 2.832-6.515l14.162-14.163c1.7-1.699 3.966-2.832 6.515-2.832 2.266 0 4.815 1.133 6.515 2.832l111.316 111.317 111.316-111.317c1.7-1.699 4.249-2.832 6.515-2.832s4.815 1.133 6.515 2.832l14.162 14.163c1.7 1.7 2.833 4.249 2.833 6.515z" fill-rule="nonzero"/> </svg>'; } if ( $replace ) { $output .= '<svg viewBox="0 0 512 512" aria-hidden="true" role="img" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1em" height="1em"> <path d="M71.029 71.029c9.373-9.372 24.569-9.372 33.942 0L256 222.059l151.029-151.03c9.373-9.372 24.569-9.372 33.942 0 9.372 9.373 9.372 24.569 0 33.942L289.941 256l151.03 151.029c9.372 9.373 9.372 24.569 0 33.942-9.373 9.372-24.569 9.372-33.942 0L256 289.941l-151.029 151.03c-9.373 9.372-24.569 9.372-33.942 0-9.372-9.373-9.372-24.569 0-33.942L222.059 256 71.029 104.971c-9.372-9.373-9.372-24.569 0-33.942z" /> </svg>'; } $output = apply_filters( 'generate_svg_icon_element', $output, $icon ); $classes = array( 'gp-icon', 'icon-' . $icon, ); $output = sprintf( '<span class="%1$s">%2$s</span>', implode( ' ', $classes ), $output ); return apply_filters( 'generate_svg_icon', $output, $icon ); } /** * Out our icon HTML. * * @since 2.3 * * @param string $icon * @param bool $replace Whether to include the close icon to be shown using JS. * @return string */ function generate_do_svg_icon( $icon, $replace = false ) { echo generate_get_svg_icon( $icon, $replace ); } /** * Get our media queries. * * @since 2.4 * * @param string $name * @return string The full media query. */ function generate_get_media_query( $name ) { $desktop = apply_filters( 'generate_desktop_media_query', '(min-width:1025px)' ); $tablet = apply_filters( 'generate_tablet_media_query', '(min-width: 769px) and (max-width: 1024px)' ); $mobile = apply_filters( 'generate_mobile_media_query', '(max-width:768px)' ); $mobile_menu = apply_filters( 'generate_mobile_menu_media_query', $mobile ); $queries = apply_filters( 'generate_media_queries', array( 'desktop' => $desktop, 'tablet' => $tablet, 'mobile' => $mobile, 'mobile-menu' => $mobile_menu, ) ); return $queries[ $name ]; }