filter_post_attribute( $attr );
$this->set_attribute( $attr );
$content = $this->render_block_element();
$settings = $this->render_settings();
$postblock_type = 'postblock-' . esc_attr( $this->attribute['sg_content_postblock_type'] );
$pagination = 'jkit-pagination-' . esc_attr( $this->attribute['pagination_mode'] );
return $this->render_wrapper(
'postblock',
$content,
array( $postblock_type, $pagination, 'post-element' ),
array(
'id' => $this->unique_id,
'settings' => $settings,
)
);
}
/**
* Render result element
*
* @param array $results Result element.
* @param array $attr Options.
*/
public function render_result_element( $results, $attr ) {
$attr = $this->filter_post_attribute( $attr );
$this->set_attribute( $attr );
$content = $this->render_result_block_element( $results );
$settings = $this->render_settings();
$breakpoint = 'type-1' === $this->attribute['sg_content_postblock_type'] || 'type-4' === $this->attribute['sg_content_postblock_type'] ? 'break-point-' . esc_attr( $this->attribute['sg_content_breakpoint'] ) : '';
$postblock_type = 'postblock-' . esc_attr( $this->attribute['sg_content_postblock_type'] );
$pagination = 'jkit-pagination-' . esc_attr( $this->attribute['pagination_mode'] );
return $this->render_wrapper(
'postblock',
$content,
array( $postblock_type, $pagination, $breakpoint, 'post-element' ),
array(
'id' => $this->unique_id,
'settings' => $settings,
)
);
}
/**
* Ajax request handler
*/
public function ajax_request() {
// @codingStandardsIgnoreStart sanitize value using jeg_sanitize_array
$attr = jeg_sanitize_array( $_REQUEST['data'] );
// @codingStandardsIgnoreEnd
$query_param = $this->build_ajax_query( $attr );
$results = $this->build_query( $query_param );
$this->set_attribute( $attr['attr'] );
if ( ! empty( $results['result'] ) ) {
if ( 1 === intval( $attr['current_page'] ) && 'nextprev' !== $attr['attr']['pagination_mode'] ) {
$content = $this->render_column( $results['result'] );
} else {
$content = $this->render_column_alt( $results['result'] );
}
} else {
$content = $this->empty_content();
}
wp_send_json(
array(
'content' => $content,
'next' => $results['next'],
'prev' => $results['prev'],
)
);
}
/**
* Get post excerpt
*
* @param int|\WP_Post $post Post object.
* @return mixed
*/
protected function get_excerpt( $post ) {
$excerpt = null;
$excerpt_enable = 'yes' === $this->attribute['sg_content_excerpt_enable'];
if ( $excerpt_enable ) {
$excerpt = $post->post_excerpt;
if ( empty( $excerpt ) ) {
$excerpt = $post->post_content;
}
$excerpt = preg_replace( '/\[[^\]]+\]/', '', $excerpt );
$excerpt = wp_trim_words( $excerpt, $this->excerpt_length(), $this->excerpt_more() );
$excerpt = apply_filters( 'jeg_module_excerpt', $excerpt, $post->ID, $this->excerpt_length(), $this->excerpt_more() );
$excerpt = '
';
}
return $excerpt;
}
/**
* Get post read more button
*
* @param int|\WP_Post $post Post object.
* @return mixed
*/
protected function get_readmore( $post, $post_title ) {
$readmore = null;
$readmore_enable = 'yes' === $this->attribute['sg_content_readmore_enable'];
if ( $readmore_enable ) {
$icon = $this->render_icon_element( $this->attribute['sg_content_readmore_icon'] );
$icon_position = esc_attr( $this->attribute['sg_content_readmore_icon_position'] );
$text = esc_attr( $this->attribute['sg_content_readmore_text'] );
if ( 'before' === $icon_position ) {
$readmore = $icon . $text;
} else {
$readmore = $text . $icon;
}
$readmore =
'';
}
return $readmore;
}
/**
* Get comment bubble icon
*
* @param int|\WP_Post $post Post object.
* @return mixed
*/
protected function get_comment_bubble( $post ) {
$comment = null;
$comment_enable = 'yes' === $this->attribute['sg_content_comment_enable'];
if ( $comment_enable ) {
$number = jkit_get_comments_number( $post->ID );
$icon = $this->render_icon_element( $this->attribute['sg_content_comment_icon'] );
$icon_position = esc_attr( $this->attribute['sg_content_comment_icon_position'] );
if ( 'before' === $icon_position ) {
$comment = $icon . '' . $number . '';
} else {
$comment = '' . $number . '' . $icon;
}
$comment =
'';
}
return $comment;
}
/**
* Get excerpt length
*
* @return int
*/
public function excerpt_length() {
if ( isset( $this->attribute['sg_content_excerpt_length'] ) ) {
if ( isset( $this->attribute['sg_content_excerpt_length']['size'] ) ) {
return intval( $this->attribute['sg_content_excerpt_length']['size'] );
}
return intval( $this->attribute['sg_content_excerpt_length'] );
} else {
return 20;
}
}
/**
* Get excerpt more
*
* @return string
*/
public function excerpt_more() {
return isset( $this->attribute['sg_content_excerpt_more'] ) ? esc_attr( $this->attribute['sg_content_excerpt_more'] ) : ' ...';
}
/**
* Filter keys to ajax post request
*
* @return string
*/
public function get_ajax_param() {
return array(
'lang',
'post_type',
'number_post',
'post_offset',
'unique_content',
'include_post',
'exclude_post',
'include_category',
'exclude_category',
'include_author',
'include_tag',
'exclude_tag',
'sort_by',
'sg_content_postblock_type',
'sg_content_element_order',
'sg_content_breakpoint',
'sg_content_image_size_imagesize_size',
'sg_content_title_html_tag',
'sg_content_category_enable',
'sg_content_excerpt_enable',
'sg_content_excerpt_length',
'sg_content_excerpt_more',
'sg_content_readmore_enable',
'sg_content_readmore_icon',
'sg_content_readmore_icon_position',
'sg_content_readmore_text',
'sg_content_comment_enable',
'sg_content_comment_icon',
'sg_content_comment_icon_position',
'sg_content_meta_enable',
'sg_content_meta_author_enable',
'sg_content_meta_author_by_text',
'sg_content_meta_author_icon',
'sg_content_meta_author_icon_position',
'sg_content_meta_date_enable',
'sg_content_meta_date_type',
'sg_content_meta_date_format',
'sg_content_meta_date_format_custom',
'sg_content_meta_date_icon',
'sg_content_meta_date_icon_position',
'st_category_position',
'pagination_mode',
'pagination_loadmore_text',
'pagination_loading_text',
'pagination_number_post',
'pagination_scroll_limit',
'pagination_icon',
'pagination_icon_position',
);
}
/**
* Build primary category element
*
* @param int $post_id Post ID.
* @return array|null|object|string|\WP_Error
*/
public function get_primary_category( $post_id ) {
$cat_id = jeg_get_primary_category( $post_id );
$category_enable = 'yes' === $this->attribute['sg_content_category_enable'];
$category = '';
if ( $category_enable && $cat_id ) {
$category = get_category( $cat_id );
$position = 'type-3' === $this->attribute['sg_content_postblock_type'] ? 'position-' . esc_attr( $this->attribute['st_category_position'] ) : '';
$class = 'class="category-' . esc_attr( $category->slug ) . '"';
$category = '';
}
return $category;
}
/**
* Build post meta 1
*
* @param int|\WP_Post $post Post object.
* @return mixed
*/
public function post_meta( $post ) {
$meta = null;
$meta_enable = $this->attribute['sg_content_meta_enable'];
if ( $meta_enable ) {
$author_output = null;
$date_output = null;
$author_enable = $this->attribute['sg_content_meta_author_enable'];
$date_enable = $this->attribute['sg_content_meta_date_enable'];
if ( $author_enable ) {
$author = $post->post_author;
$author_url = esc_url( get_author_posts_url( $author ) );
$author_name = esc_attr( get_the_author_meta( 'display_name', $author ) );
$author_by = esc_attr( $this->attribute['sg_content_meta_author_by_text'] );
$icon = $this->render_icon_element( $this->attribute['sg_content_meta_author_icon'] );
$icon_position = esc_attr( $this->attribute['sg_content_meta_author_icon_position'] );
if ( 'before' === $icon_position ) {
$author_output = '';
} else {
$author_output = '';
}
}
if ( $date_enable ) {
$icon = $this->render_icon_element( $this->attribute['sg_content_meta_date_icon'] );
$icon_position = esc_attr( $this->attribute['sg_content_meta_date_icon_position'] );
if ( 'before' === $icon_position ) {
$date_output = '' . $icon . $this->format_date( $post ) . '
';
} else {
$date_output = '' . $this->format_date( $post ) . $icon . '
';
}
}
$meta = '' . $author_output . $date_output . '
';
}
return apply_filters( 'jkit_post_block_meta', $meta, $post, $this );
}
/**
* Format Date for frontend view.
*
* @param int|\WP_Post $post Post object.
* @return mixed
*/
public function format_date( $post ) {
$date_type = isset( $this->attribute['sg_content_meta_date_type'] ) ? $this->attribute['sg_content_meta_date_type'] : 'published';
if ( 'both' === $date_type ) {
$output = $this->get_post_date( $post, $this->attribute['sg_content_meta_date_format'], 'published', $this->attribute['sg_content_meta_date_format_custom'] );
$output = $output . esc_html__( ' - Updated on ', 'jeg-elementor-kit' );
$output = $output . $this->get_post_date( $post, $this->attribute['sg_content_meta_date_format'], 'modified', $this->attribute['sg_content_meta_date_format_custom'] );
} else {
$output = $this->get_post_date( $post, $this->attribute['sg_content_meta_date_format'], $date_type, $this->attribute['sg_content_meta_date_format_custom'] );
}
return $output;
}
/**
* Build column type 1 method
*
* @param array $results Result element.
* @return string
*/
public function build_column( $results ) {
$block = '';
$image_size = esc_attr( $this->attribute['sg_content_image_size_imagesize_size'] );
$html_tag = \Elementor\Utils::validate_html_tag( $this->attribute['sg_content_title_html_tag'] );
$type = esc_attr( $this->attribute['sg_content_postblock_type'] );
$order = explode( ',', $this->attribute['sg_content_element_order'] );
foreach ( $results as $post ) {
$thumbnail = $this->get_thumbnail( $post->ID, $image_size );
$primary_category = $this->get_primary_category( $post->ID );
$post_url = esc_url( get_the_permalink( $post ) );
$post_title = esc_attr( get_the_title( $post ) );
$content = '';
foreach ( $order as $item ) {
if ( 'title' === $item ) {
$content .=
'<' . $html_tag . ' class="jkit-post-title">
' . $post_title . '
' . $html_tag . '>';
}
if ( 'meta' === $item ) {
$content .= $this->post_meta( $post );
}
if ( 'excerpt' === $item ) {
$content .= $this->get_excerpt( $post );
}
if ( 'read' === $item ) {
$content .=
'
' . $this->get_readmore( $post, $post_title ) . $this->get_comment_bubble( $post ) . '
';
}
}
$thumb = jkit_edit_post( $post->ID ) . '' . $thumbnail . '';
if ( 'type-3' === $type ) {
$block .=
'ID ) . '>
' . $thumb . $primary_category . '
' . $content . '
';
} else {
$block .=
'ID ) . '>
' . $thumb . '
' . $primary_category . $content . '
';
}
}
return $block;
}
}