D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
home
/
pinaclec
/
public_html
/
wp-content
/
plugins
/
bbpowerpack
/
classes
/
Filename :
class-pp-post-helper.php
back
Copy
<?php // Exit if accessed directly. if ( ! defined( 'ABSPATH' ) ) { exit; } class BB_PowerPack_Post_Helper { static public $post_slides = array(); static public function render_post_image( $settings, $post_id, $has_image ) { $post_image_settings = self::post_image_get_settings( $post_id, $settings->image_thumb_crop, $settings, $has_image ); ob_start(); FLBuilder::render_module_html( 'photo', $post_image_settings ); $post_image = ob_get_clean(); $css_class = 'pp-post-img'; if ( isset( $post_image_settings['attributes'] ) && isset( $post_image_settings['attributes']['data-no-lazy'] ) ) { // no-lazyload for excluding image from Smush Lazy Load. $css_class .= ' no-lazyload'; } echo self::img_inject_css_class( $post_image, $css_class ); } static public function img_inject_css_class( $img, $class ) { $pattern = "/<img(.*?)class=\"(.*?)\"(.*?)>/i"; $replacement = '<img$1class="$2 ' . $class . '"$3>'; $image = preg_replace( $pattern, $replacement, $img ); return $image; } static public function post_catch_image( $content, $size = 'large' ) { $first_img = ''; $id = ''; ob_start(); ob_end_clean(); $output = preg_match_all( '/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $content, $matches ); if ( isset( $matches[1][0] ) ) { $first_img = $matches[1][0]; } // get the image of the given size. if ( ! empty( $first_img ) ) { $id = attachment_url_to_postid( $first_img ); if ( $id ) { $src = wp_get_attachment_image_src( $id, $size ); if ( is_array( $src ) ) { $first_img = $src[0]; } } } return array( 'id' => $id, 'src' => $first_img ); } static public function post_image_get_settings( $id, $crop, $settings, $has_featured_image ) { if ( $has_featured_image ) { // get image source and data $src = self::post_image_get_full_src( $id, $settings ); $photo_data = self::post_image_get_data( $id ); } else { $has_fallback_image = isset( $settings->fallback_image ) && 'custom' == $settings->fallback_image && ! empty( $settings->fallback_image_custom ); $src = $has_fallback_image ? self::post_image_get_full_src( $id, $settings, $settings->fallback_image_custom ) : ''; $src = empty( $src ) && isset( $settings->fallback_image_custom_src ) ? $settings->fallback_image_custom_src : $src; $photo_data = self::post_image_get_data( $id, $settings->fallback_image_custom ); } // set params $photo_settings = array( 'crop' => $crop, 'link_type' => '', 'link_url' => '', 'photo' => $photo_data, 'photo_src' => ! empty( $src ) ? $src : apply_filters( 'pp_cg_placeholder_img', BB_POWERPACK_URL . 'assets/images/placeholder.jpg' ), 'photo_source' => 'library', 'attributes' => array( 'data-no-lazy' => 1, ), ); if ( in_array( $settings->more_link_type, array( 'button', 'thumb', 'title_thumb' ) ) ) { $photo_settings['link_type'] = 'url'; $photo_settings['link_url'] = get_the_permalink( $id ); } if ( isset( $settings->link_target_new ) && 'yes' === $settings->link_target_new ) { $photo_settings['link_url_target'] = '_blank'; } return apply_filters( 'pp_post_image_settings_data', $photo_settings, $settings ); } static public function post_image_get_full_src( $id, $settings, $attachment_id = false ) { $attachment_id = $attachment_id ? $attachment_id : get_post_thumbnail_id( $id ); $size = isset( $settings->image_thumb_size ) ? $settings->image_thumb_size : 'medium'; $img = wp_get_attachment_image_src( $attachment_id, $size ); return $img[0]; } static protected function post_image_get_data( $id, $attachment_id = false ) { $attachment_id = $attachment_id ? $attachment_id : get_post_thumbnail_id( $id ); return FLBuilderPhoto::get_attachment_data( $attachment_id ); } static public function post_build_array( $settings ) { // checks if the post_slides array is cached if ( ! is_array( self::$post_slides ) ) { // if not, create it self::$post_slides = array(); // check if we have selected posts if ( empty( $settings->posts_post ) ) { // if not, create a default query with it $settings = ! empty( $settings ) ? $settings : new stdClass(); // set WP_Query "fields" arg as 'ids' to return less information $settings->fields = 'ids'; // Get the query data. $query = FLBuilderLoop::query( $settings ); // build the post_slides array with post id's and featured image url's foreach ( $query->posts as $key => $id ) { self::$post_slides[ $id ] = self::post_image_get_full_src( $id, $settings ); } } else { // if yes, get the selected posts and build the post_slides array $slides = explode( ',', $settings->posts_post ); foreach ( $slides as $key => $id ) { self::$post_slides[ $id ] = self::post_image_get_full_src( $id, $settings ); } } } return self::$post_slides; } public function post_get_uncropped_url( $id, $settings ) { $posts = self::post_build_array( $settings ); return $posts[ $id ]; } /** * Build base URL for our custom pagination. * * @param string $permalink_structure The current permalink structure. * @param string $base The base URL to parse * @since 1.3.1 * @return string */ static public function build_base_url( $permalink_structure, $base ) { // Check to see if we are using pretty permalinks if ( ! empty( $permalink_structure ) ) { if ( strrpos( $base, 'paged-' ) ) { $base = substr_replace( $base, '', strrpos( $base, 'paged-' ), strlen( $base ) ); } // Remove query string from base URL since paginate_links() adds it automatically. // This should also fix the WPML pagination issue that was added since 1.10.2. if ( count( $_GET ) > 0 ) { $base = strtok( $base, '?' ); } // Add trailing slash when necessary. if ( '/' == substr( $permalink_structure, -1 ) ) { $base = trailingslashit( $base ); } else { $base = untrailingslashit( $base ); } } else { $url_params = wp_parse_url( $base, PHP_URL_QUERY ); if ( empty( $url_params ) ) { $base = trailingslashit( $base ); } } return $base; } /** * Build the custom pagination format. * * @param string $permalink_structure * @param string $base * @since 1.3.1 * @return string */ static public function paged_format( $permalink_structure, $base ) { if ( FLBuilderLoop::$loop_counter > 1 ) { $page_prefix = 'paged-' . FLBuilderLoop::$loop_counter; } else { $page_prefix = empty( $permalink_structure ) ? 'paged' : 'page'; } if ( ! empty( $permalink_structure ) ) { $format = substr( $base, -1 ) != '/' ? '/' : ''; $format .= $page_prefix . '/'; $format .= '%#%'; $format .= substr( $permalink_structure, -1 ) == '/' ? '/' : ''; } elseif ( empty( $permalink_structure ) || is_search() ) { $parse_url = wp_parse_url( $base, PHP_URL_QUERY ); $format = empty( $parse_url ) ? '?' : '&'; $format .= $page_prefix . '=%#%'; } return $format; } static public function pagination( $query, $settings ) { $total = 0; $page = 0; $paged = FLBuilderLoop::get_paged(); $per_page = 'main_query' !== $settings->data_source ? absint( $settings->posts_per_page ) : get_option( 'posts_per_page' ); $total_posts_count = absint( $settings->total_posts_count ); $posts_aval = $query->found_posts; $permalink_structure = get_option( 'permalink_structure' ); $base = html_entity_decode( get_pagenum_link() ); if ( ! $per_page && 'main_query' !== $settings->data_source ) { $per_page = get_option( 'posts_per_page' ); } if ( 'custom' == $settings->total_post && $total_posts_count && $total_posts_count != $posts_aval ) { if ( $total_posts_count > $posts_aval ) { $page = $posts_aval / $per_page; $total = $posts_aval % $per_page; } if ( $total_posts_count < $posts_aval ) { $page = $total_posts_count / $per_page; $total = $total_posts_count % $per_page; } if ( $total > 0 ) { $page = $page + 1; } } else { $page = $query->max_num_pages; //FLBuilderLoop::pagination($query); } if ( $page > 1 ) { if ( ! $current_page = $paged ) { // @codingStandardsIgnoreLine $current_page = 1; } $base = self::build_base_url( $permalink_structure, $base ); $format = self::paged_format( $permalink_structure, $base ); $links = paginate_links( array( 'base' => $base . '%_%', 'format' => $format, 'current' => $current_page, 'total' => $page, 'type' => 'list', ) ); if ( isset( $settings->pagination_nofollow ) && 'yes' == $settings->pagination_nofollow ) { $links = str_replace( '<a', '<a rel="nofollow" ', $links ); } echo $links; } } /** * Build pagination. * * @since 1.1.0 * @return void */ static public function ajax_pagination( $query, $settings, $current_url = '', $paged = 1, $filter = '', $node_id = '' ) { $total_pages = $query->max_num_pages; $per_page = 'main_query' !== $settings->data_source ? absint( $settings->posts_per_page ) : get_option( 'posts_per_page' ); $total_posts_count = absint( $settings->total_posts_count ); $permalink_structure = get_option( 'permalink_structure' ); $current_url = empty( $current_url ) ? get_pagenum_link() : $current_url; $base = untrailingslashit( html_entity_decode( $current_url ) ); if ( ! $per_page && 'main_query' !== $settings->data_source ) { $per_page = get_option( 'posts_per_page' ); } if ( 'custom' == $settings->total_post && ! empty( $total_posts_count ) && $total_posts_count != $query->found_posts ) { $total = 0; if ( $total_posts_count > $query->found_posts ) { $total_pages = $query->found_posts / $per_page; $total = $query->found_posts % $per_page; } if ( $total_posts_count < $query->found_posts ) { $total_pages = $total_posts_count / $per_page; $total = $total_posts_count % $per_page; } if ( $total > 0 ) { $total_pages = $total_pages + 1; } } if ( $total_pages > 1 ) { if ( ! $current_page = $paged ) { // @codingStandardsIgnoreLine $current_page = 1; } $base = FLBuilderLoop::build_base_url( $permalink_structure, $base ); $format = FLBuilderLoop::paged_format( $permalink_structure, $base ); if ( '' != $filter ) { $format .= '?filter_term=' . $filter . '&node_id=' . $node_id; } $links = paginate_links( array( 'base' => $base . '%_%', 'format' => $format, 'current' => $current_page, 'total' => $total_pages, 'type' => 'list', ) ); if ( isset( $settings->pagination_nofollow ) && 'yes' == $settings->pagination_nofollow ) { $links = str_replace( '<a', '<a rel="nofollow" ', $links ); } echo $links; } } /** * Renders the schema structured data for the current * post in the loop. * * @return void */ static public function schema_meta() { /** * Disable all post-grid schema markup * @see pp_post_disable_schema */ if ( ! self::is_schema_enabled() ) { return false; } do_action( 'pp_post_before_schema_meta' ); // General Schema Meta ob_start(); echo '<meta itemscope itemprop="mainEntityOfPage" itemtype="https://schema.org/WebPage" itemid="' . esc_url( get_permalink() ) . '" content="' . the_title_attribute( array( 'echo' => false, ) ) . '" />'; echo '<meta itemprop="datePublished" content="' . get_the_time( 'Y-m-d' ) . '" />'; echo '<meta itemprop="dateModified" content="' . get_the_modified_date( 'Y-m-d' ) . '" />'; echo apply_filters( 'pp_post_schema_meta_general', ob_get_clean() ); // Publisher Schema Meta ob_start(); echo '<div itemprop="publisher" itemscope itemtype="https://schema.org/Organization">'; echo '<meta itemprop="name" content="' . get_bloginfo( 'name' ) . '">'; // Fetch logo from theme or filter. $image = ''; if ( class_exists( 'FLTheme' ) && 'image' == FLTheme::get_setting( 'fl-logo-type' ) ) { $image = FLTheme::get_setting( 'fl-logo-image' ); } elseif ( has_custom_logo() ) { $custom_logo_id = get_theme_mod( 'custom_logo' ); $logo = wp_get_attachment_image_src( $custom_logo_id, 'full' ); $image = $logo[0]; } $image = apply_filters( 'pp_post_schema_meta_publisher_image_url', $image ); if ( $image ) { echo '<div itemprop="logo" itemscope itemtype="https://schema.org/ImageObject">'; echo '<meta itemprop="url" content="' . $image . '">'; echo '</div>'; } echo '</div>'; echo apply_filters( 'pp_post_schema_meta_publisher', ob_get_clean() ); // Author Schema Meta ob_start(); echo '<div itemscope itemprop="author" itemtype="https://schema.org/Person">'; echo '<meta itemprop="url" content="' . get_author_posts_url( get_the_author_meta( 'ID' ) ) . '" />'; echo '<meta itemprop="name" content="' . get_the_author_meta( 'display_name', get_the_author_meta( 'ID' ) ) . '" />'; echo '</div>'; echo apply_filters( 'pp_post_schema_meta_author', ob_get_clean() ); // Image Schema Meta if ( has_post_thumbnail() ) { $image = wp_get_attachment_image_src( get_post_thumbnail_id( get_the_ID() ), 'full' ); if ( is_array( $image ) ) { echo '<div itemscope itemprop="image" itemtype="https://schema.org/ImageObject">'; echo '<meta itemprop="url" content="' . $image[0] . '" />'; echo '<meta itemprop="width" content="' . $image[1] . '" />'; echo '<meta itemprop="height" content="' . $image[2] . '" />'; echo '</div>'; } } // Comment Schema Meta ob_start(); echo '<div itemprop="interactionStatistic" itemscope itemtype="https://schema.org/InteractionCounter">'; echo '<meta itemprop="interactionType" content="https://schema.org/CommentAction" />'; echo '<meta itemprop="userInteractionCount" content="' . wp_count_comments( get_the_ID() )->approved . '" />'; echo '</div>'; echo apply_filters( 'pp_post_schema_meta_comments', ob_get_clean() ); do_action( 'pp_post_after_schema_meta' ); } /** * Renders the schema itemtype for the current * post in the loop. * * @return void */ static public function schema_itemtype() { global $post; if ( ! self::is_schema_enabled() ) { return false; } $schema = 'https://schema.org/BlogPosting'; if ( ! is_object( $post ) || ! isset( $post->post_type ) || 'post' != $post->post_type ) { $schema = 'https://schema.org/CreativeWork'; } return $schema; } /** * Renders the schema itemtype for the collection * * @return string */ static public function schema_collection_type( $data_source = 'custom_query', $post_type = 'post' ) { $schema = ''; $post_type = (array) $post_type; if ( ! self::is_schema_enabled() ) { return $schema; } if ( is_archive() && 'main_query' === $data_source ) { $schema = is_post_type_archive( 'post' ) ? 'https://schema.org/Blog' : 'https://schema.org/Collection'; } else { $schema = ( in_array( 'post', $post_type ) ) ? 'https://schema.org/Blog' : 'https://schema.org/Collection'; } return $schema; } static public function print_schema( $schema ) { if ( self::is_schema_enabled() ) { echo $schema; } } static public function is_schema_enabled() { /** * Disable all schema. * @see pp_post_disable_schema */ if ( false !== apply_filters( 'pp_post_disable_schema', false ) ) { return false; } else { return true; } } static public function additional_image_sizes( $attrs ) { if ( ! function_exists( 'wp_get_additional_image_sizes' ) ) { return $attrs; } // Get an array of custom image sizes $allImageSizes = wp_get_additional_image_sizes(); $imageSizes = []; // Loop through the custom images, make a suitable array foreach ( $allImageSizes as $key => $value ) { $imageSizes[ $key ] = $key; } // Merge the new array with the existing, and return $attrs = array_merge( $attrs, $imageSizes ); return $attrs; } }