'showViewPostButton',
'operator' => '==',
'value' => true,
),
)
);
array_unshift(
$button_fields, array(
'key' => 'buttonLabel',
'label' => esc_html__( 'Label', 'canvas' ),
'section' => 'buttonSettings',
'type' => 'text',
'default' => esc_html__( 'View Post', 'canvas' ),
'active_callback' => array(
array(
'field' => 'showViewPostButton',
'operator' => '==',
'value' => true,
),
),
)
);
$blocks[] = array(
'name' => 'canvas/posts',
'title' => esc_html__( 'Posts', 'canvas' ),
'description' => '',
'category' => 'canvas',
'keywords' => array(),
'icon' => '',
'supports' => array(
'className' => true,
'anchor' => true,
'html' => false,
'canvasSpacings' => true,
'canvasBorder' => true,
'canvasResponsive' => true,
),
'styles' => array(),
'location' => array(),
'sections' => array(
'general' => array(
'title' => esc_html__( 'Block Settings', 'canvas' ),
'priority' => 5,
'open' => true,
),
'meta' => array(
'title' => esc_html__( 'Meta Settings', 'canvas' ),
'priority' => 10,
),
'thumbnail' => array(
'title' => esc_html__( 'Thumbnail Settings', 'canvas' ),
'priority' => 20,
),
'query' => array(
'title' => esc_html__( 'Query Settings', 'canvas' ),
'priority' => 30,
),
'pagination' => array(
'title' => esc_html__( 'Pagination Settings', 'canvas' ),
'priority' => 40,
),
'buttonSettings' => array(
'title' => esc_html__( 'Button Settings', 'canvas' ),
'priority' => 50,
),
'color' => array(
'title' => esc_html__( 'Color Settings', 'canvas' ),
'priority' => 60,
),
),
'layouts' => array(
'grid' => array(
'name' => esc_html__( 'Grid', 'canvas' ),
'icon' => '',
'location' => array( 'root', 'section-wide', 'section-content' ),
'template' => dirname( __FILE__ ) . '/block-posts/layouts/grid.php',
'sections' => array(),
'fields' => array(
array(
'key' => 'columns',
'label' => esc_html__( 'Columns', 'canvas' ),
'type' => 'number',
'step' => 1,
'min' => 2,
'max' => 4,
'default' => 2,
),
),
),
'masonry' => array(
'name' => esc_html__( 'Masonry', 'canvas' ),
'icon' => '',
'location' => array( 'root', 'section-wide', 'section-content' ),
'template' => dirname( __FILE__ ) . '/block-posts/layouts/masonry.php',
'sections' => array(),
'fields' => array(
array(
'key' => 'columns',
'label' => esc_html__( 'Columns', 'canvas' ),
'type' => 'number',
'step' => 1,
'min' => 2,
'max' => 4,
'default' => 2,
),
),
),
'list' => array(
'name' => esc_html__( 'List', 'canvas' ),
'icon' => '',
'location' => array( 'root', 'section-wide', 'section-content' ),
'template' => dirname( __FILE__ ) . '/block-posts/layouts/list.php',
'sections' => array(),
'fields' => array(),
),
),
'fields' => array_merge(
array(
// Query Settings.
array(
'key' => 'queryGroup',
'section' => 'query',
'type' => 'type-string',
'default' => '',
),
array(
'key' => 'query',
'section' => 'query',
'type' => 'query',
'default' => array(
'posts_type' => 'post',
'categories' => '',
'tags' => '',
'exclude_categories' => '',
'exclude_tags' => '',
'formats' => '',
'posts' => '',
'offset' => '',
'orderby' => 'date',
'order' => 'DESC',
'time_frame' => '',
'taxonomy' => '',
'terms' => '',
),
'active_callback' => array(
array(
'field' => 'relatedPosts',
'operator' => '==',
'value' => false,
),
),
),
array(
'key' => 'relatedPosts',
'label' => esc_html__( 'Display Related Posts', 'canvas' ),
'help' => esc_html__( 'Changes will be visible on frontend only. If enabled, posts will be filtered by the categories of the current post', 'canvas' ),
'section' => 'query',
'type' => 'toggle',
'default' => false,
'active_callback' => array(
array(
'field' => 'query.categories',
'operator' => '===',
'value' => '',
),
array(
'field' => 'query.tags',
'operator' => '===',
'value' => '',
),
array(
'field' => 'query.orderby',
'operator' => '===',
'value' => 'date',
),
array(
'field' => 'query.order',
'operator' => '===',
'value' => 'DESC',
),
array(
'field' => 'query.posts_type',
'operator' => '===',
'value' => 'post',
),
array(
'field' => 'query.formats',
'operator' => '===',
'value' => '',
),
array(
'field' => 'query.posts',
'operator' => '===',
'value' => '',
),
array(
'field' => 'query.offset',
'operator' => '===',
'value' => '',
),
),
),
array(
'key' => 'avoidDuplicatePosts',
'label' => esc_html__( 'Avoid Duplicate Posts', 'canvas' ),
'help' => esc_html__( 'Changes will be visible on frontend only.', 'canvas' ),
'section' => 'query',
'type' => 'toggle',
'default' => false,
),
// Pagination Settings.
array(
'key' => 'showPagination',
'label' => esc_html__( 'Display Pagination', 'canvas' ),
'section' => 'pagination',
'type' => 'toggle',
'default' => false,
'active_callback' => array(
array(
'field' => 'relatedPosts',
'operator' => '==',
'value' => false,
),
array(
array(
array(
'field' => 'query.categories',
'operator' => '===',
'value' => '',
),
array(
'field' => 'query.tags',
'operator' => '===',
'value' => '',
),
array(
'field' => 'query.orderby',
'operator' => '===',
'value' => 'date',
),
array(
'field' => 'query.order',
'operator' => '===',
'value' => 'DESC',
),
array(
'field' => 'query.posts_type',
'operator' => '===',
'value' => 'post',
),
array(
'field' => 'query.formats',
'operator' => '===',
'value' => '',
),
array(
'field' => 'query.posts',
'operator' => '===',
'value' => '',
),
array(
'field' => 'query.offset',
'operator' => '===',
'value' => '',
),
array(
'field' => 'avoidDuplicatePosts',
'operator' => '===',
'value' => false,
),
),
array(
array(
'field' => 'query.categories',
'operator' => '!==',
'value' => '',
),
array(
'field' => 'query.categories',
'count' => ',',
'operator' => '==',
'value' => 0,
),
array(
'field' => 'query.tags',
'operator' => '===',
'value' => '',
),
array(
'field' => 'query.orderby',
'operator' => '===',
'value' => 'date',
),
array(
'field' => 'query.order',
'operator' => '===',
'value' => 'DESC',
),
array(
'field' => 'query.posts_type',
'operator' => '===',
'value' => 'post',
),
array(
'field' => 'query.formats',
'operator' => '===',
'value' => '',
),
array(
'field' => 'query.posts',
'operator' => '===',
'value' => '',
),
array(
'field' => 'query.offset',
'operator' => '===',
'value' => '',
),
array(
'field' => 'avoidDuplicatePosts',
'operator' => '===',
'value' => false,
),
),
array(
array(
'field' => 'query.tags',
'count' => ',',
'operator' => '==',
'value' => 0,
),
array(
'field' => 'query.categories',
'operator' => '===',
'value' => '',
),
array(
'field' => 'query.orderby',
'operator' => '===',
'value' => 'date',
),
array(
'field' => 'query.order',
'operator' => '===',
'value' => 'DESC',
),
array(
'field' => 'query.posts_type',
'operator' => '===',
'value' => 'post',
),
array(
'field' => 'query.formats',
'operator' => '===',
'value' => '',
),
array(
'field' => 'query.posts',
'operator' => '===',
'value' => '',
),
array(
'field' => 'query.offset',
'operator' => '===',
'value' => '',
),
array(
'field' => 'avoidDuplicatePosts',
'operator' => '===',
'value' => false,
),
),
),
),
),
array(
'key' => 'postsCount',
'label' => esc_html__( 'Posts Count', 'canvas' ),
'section' => 'pagination',
'type' => 'number',
'default' => 10,
'min' => 1,
'max' => 100,
'active_callback' => array(
array(
array(
'field' => 'showPagination',
'operator' => '==',
'value' => false,
),
array(
'field' => 'query.orderby',
'operator' => '!==',
'value' => 'date',
),
array(
'field' => 'query.order',
'operator' => '!==',
'value' => 'DESC',
),
array(
'field' => 'query.posts_type',
'operator' => '!==',
'value' => 'post',
),
array(
'field' => 'query.formats',
'operator' => '!==',
'value' => '',
),
array(
'field' => 'query.posts',
'operator' => '!==',
'value' => '',
),
array(
'field' => 'query.offset',
'operator' => '!==',
'value' => '',
),
array(
'field' => 'avoidDuplicatePosts',
'operator' => '!==',
'value' => false,
),
array(
array(
'field' => 'query.categories',
'operator' => '!==',
'value' => '',
),
array(
'field' => 'query.tags',
'operator' => '!==',
'value' => '',
),
),
array(
array(
'field' => 'query.categories',
'operator' => '!==',
'value' => '',
),
array(
'field' => 'query.categories',
'count' => ',',
'operator' => '>=',
'value' => 1,
),
),
array(
array(
'field' => 'query.tags',
'operator' => '!==',
'value' => '',
),
array(
'field' => 'query.tags',
'count' => ',',
'operator' => '>=',
'value' => 1,
),
),
),
),
),
// Meta Settings.
array(
'key' => 'showMetaCategory',
'label' => esc_html__( 'Category', 'canvas' ),
'section' => 'meta',
'type' => 'toggle',
'default' => true,
),
array(
'key' => 'showMetaAuthor',
'label' => esc_html__( 'Author', 'canvas' ),
'section' => 'meta',
'type' => 'toggle',
'default' => true,
),
array(
'key' => 'showMetaDate',
'label' => esc_html__( 'Date', 'canvas' ),
'section' => 'meta',
'type' => 'toggle',
'default' => true,
),
array(
'key' => 'showMetaComments',
'label' => esc_html__( 'Comments', 'canvas' ),
'section' => 'meta',
'type' => 'toggle',
'default' => false,
),
cnvs_post_views_enabled() ? array(
'key' => 'showMetaViews',
'label' => esc_html__( 'Views', 'canvas' ),
'section' => 'meta',
'type' => 'toggle',
'default' => false,
) : array(),
cnvs_powerkit_module_enabled( 'reading_time' ) ? array(
'key' => 'showMetaReadingTime',
'label' => esc_html__( 'Reading Time', 'canvas' ),
'section' => 'meta',
'type' => 'toggle',
'default' => false,
) : array(),
array(
'key' => 'showExcerpt',
'label' => esc_html__( 'Excerpt', 'canvas' ),
'section' => 'meta',
'type' => 'toggle',
'default' => true,
),
array(
'key' => 'showViewPostButton',
'label' => esc_html__( 'View Post Button', 'canvas' ),
'section' => 'meta',
'type' => 'toggle',
'default' => false,
),
),
array(
array(
'key' => 'imageSize',
'label' => esc_html__( 'Image Size', 'canvas' ),
'section' => 'thumbnail',
'type' => 'select',
'default' => 'large',
'choices' => $image_sizes,
),
),
$button_fields,
array(
// Color Settings.
array(
'key' => 'colorHeading',
'label' => esc_html__( 'Heading', 'canvas' ),
'section' => 'color',
'type' => 'color',
'default' => '#000',
'output' => array(
array(
'element' => '$.cnvs-block-posts .cnvs-block-posts-title a',
'property' => 'color',
),
),
),
array(
'key' => 'colorHeadingHover',
'label' => esc_html__( 'Heading Hover', 'canvas' ),
'section' => 'color',
'type' => 'color',
'default' => '#5a5a5a',
'output' => array(
array(
'element' => '$.cnvs-block-posts .cnvs-block-posts-title a:hover, $ .cnvs-block-posts .cnvs-block-posts-title a:focus',
'property' => 'color',
),
),
),
array(
'key' => 'colorText',
'label' => esc_html__( 'Text', 'canvas' ),
'section' => 'color',
'type' => 'color',
'default' => '',
'output' => array(
array(
'element' => '$',
'property' => 'color',
),
),
),
array(
'key' => 'colorMetaLinks',
'label' => esc_html__( 'Post Meta Links', 'canvas' ),
'section' => 'color',
'type' => 'color',
'default' => '',
'output' => array(
array(
'element' => '$.cnvs-block-posts .cnvs-post-meta a, $.cnvs-block-posts .post-categories a',
'property' => 'color',
),
),
),
array(
'key' => 'colorMetaLinksHover',
'label' => esc_html__( 'Post Meta Links Hover', 'canvas' ),
'section' => 'color',
'type' => 'color',
'default' => '',
'output' => array(
array(
'element' => '$.cnvs-block-posts .cnvs-post-meta a:hover, $.cnvs-block-posts .cnvs-post-meta a:focus, $.cnvs-block-posts .post-categories a:hover, $.cnvs-block-posts .post-categories a:focus',
'property' => 'color',
),
),
),
array(
'key' => 'colorMeta',
'label' => esc_html__( 'Post Meta', 'canvas' ),
'section' => 'color',
'type' => 'color',
'default' => '',
'output' => array(
array(
'element' => '$.cnvs-block-posts .cnvs-post-meta span, $.cnvs-block-posts .post-categories span',
'property' => 'color',
),
),
),
)
),
'template' => dirname( __FILE__ ) . '/block-posts/layouts/list.php',
'fallback' => array(
'layout' => 'list',
),
// enqueue registered scripts/styles.
'style' => is_admin() ? '' : 'canvas-block-posts-style',
'script' => is_admin() ? '' : 'canvas-block-posts-script',
'editor_style' => 'canvas-block-posts-editor-style',
'editor_script' => 'canvas-block-posts-editor-script',
);
return $blocks;
}
/**
* Add $posts template variable.
*
* @param array $variables Template variables.
* @return array
*/
public function block_template_variables( $variables ) {
$variables['posts'] = $this->get_post_query( $variables['attributes'], $variables['options'] );
return $variables;
}
/**
* Reset WP Query data.
*/
public function block_server_rendered_template() {
wp_reset_postdata();
}
/**
* Prepare post query by block attributes
*
* @param array $attributes Block attributes.
* @param array $options Layout specific attributes.
* @return array
*/
public function get_post_query( $attributes, $options ) {
global $cnvs_posts;
global $wp_query;
if ( ! $cnvs_posts ) {
$cnvs_posts = array();
}
$query = isset( $attributes['query'] ) ? $attributes['query'] : array();
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$args = array(
'ignore_sticky_posts' => true,
'is_post_query' => true,
'orderby' => 'date',
'order' => 'DESC',
'paged' => $paged,
);
$args['posts_per_page'] = get_option( 'posts_per_page' );
// Filter by post type.
if ( isset( $query['posts_type'] ) && $query['posts_type'] ) {
$args['post_type'] = $query['posts_type'];
}
// Filter by posts.
if ( isset( $query['posts'] ) && $query['posts'] ) {
$args['post__in'] = explode( ',', $query['posts'] );
}
// Filter by categories.
if ( isset( $query['posts_type'] ) && 'post' === $query['posts_type'] ) {
if ( isset( $query['categories'] ) && $query['categories'] ) {
$args['tax_query'] = isset( $args['tax_query'] ) && is_array( $args['tax_query'] ) ? $args['tax_query'] : array();
$args['tax_query'][] = array(
'taxonomy' => 'category',
'field' => 'slug',
'terms' => array_map( 'trim', explode( ',', $query['categories'] ) ),
);
}
}
// Filter by tags.
if ( isset( $query['tags'] ) && $query['tags'] ) {
$args['tax_query'] = isset( $args['tax_query'] ) && is_array( $args['tax_query'] ) ? $args['tax_query'] : array();
$args['tax_query'][] = array(
'taxonomy' => 'post_tag',
'field' => 'slug',
'terms' => array_map( 'trim', explode( ',', $query['tags'] ) ),
);
}
// Exclude Categories.
if ( isset( $query['posts_type'] ) && 'post' === $query['posts_type'] ) {
if ( isset( $query['exclude_categories'] ) && $query['exclude_categories'] ) {
$args['tax_query'] = isset( $args['tax_query'] ) && is_array( $args['tax_query'] ) ? $args['tax_query'] : array();
$args['tax_query'][] = array(
'taxonomy' => 'category',
'field' => 'slug',
'operator' => 'NOT IN',
'terms' => array_map( 'trim', explode( ',', $query['exclude_categories'] ) ),
);
}
}
// Exclude tags.
if ( isset( $query['exclude_tags'] ) && $query['exclude_tags'] ) {
$args['tax_query'] = isset( $args['tax_query'] ) && is_array( $args['tax_query'] ) ? $args['tax_query'] : array();
$args['tax_query'][] = array(
'taxonomy' => 'post_tag',
'field' => 'slug',
'operator' => 'NOT IN',
'terms' => array_map( 'trim', explode( ',', $query['exclude_tags'] ) ),
);
}
// Taxonomy and term.
if ( isset( $query['taxonomy'] ) && $query['taxonomy'] && isset( $query['terms'] ) && $query['terms'] ) {
$args['tax_query'] = isset( $args['tax_query'] ) && is_array( $args['tax_query'] ) ? $args['tax_query'] : array();
$args['tax_query'][] = array(
'taxonomy' => $query['taxonomy'],
'field' => 'slug',
'terms' => array_map( 'trim', explode( ',', $query['terms'] ) ),
);
}
// Filter by post formats.
if ( current_theme_supports( 'post-formats' ) && isset( $query['formats'] ) && $query['formats'] ) {
$post_formats = get_theme_support( 'post-formats' );
$post_formats = is_array( $post_formats[0] ) ? $post_formats[0] : false;
if ( $post_formats ) {
$selected_formats = explode( ',', $query['formats'] );
// first array used to include formats, the second to exclude
// we need this, because when select `standard` post format, nothing loaded.
$result_formats = array( array(), array() );
foreach ( $post_formats as $format ) {
$idx = in_array( $format, $selected_formats, true ) ? 0 : 1;
$result_formats[ $idx ][] = 'post-format-' . $format;
}
$args['tax_query'] = isset( $args['tax_query'] ) && is_array( $args['tax_query'] ) ? $args['tax_query'] : array();
// include formats only if Standard format is not selected.
if ( ! empty( $result_formats[0] ) && ! in_array( 'standard', $selected_formats, true ) ) {
$args['tax_query'][] = array(
'taxonomy' => 'post_format',
'field' => 'slug',
'terms' => $result_formats[0],
);
}
// exclude formats.
if ( ! empty( $result_formats[1] ) ) {
$args['tax_query'][] = array(
'taxonomy' => 'post_format',
'field' => 'slug',
'operator' => 'NOT IN',
'terms' => $result_formats[1],
);
}
}
}
// Add offset.
if ( isset( $query['offset'] ) && $query['offset'] ) {
$args['offset'] = $query['offset'];
}
if ( isset( $query['orderby'] ) ) {
$type_post_views = cnvs_post_views_enabled();
// Order by Views.
if ( $type_post_views && 'views' === $query['orderby'] ) {
$args['orderby'] = $type_post_views;
// Don't hide posts without views.
$args['views_query']['hide_empty'] = false;
// Time Frame.
if ( isset( $query['time_frame'] ) && $query['time_frame'] ) {
$args['date_query'] = array(
array(
'column' => 'post_date_gmt',
'after' => $query['time_frame'] . ' ago',
),
);
}
} else {
$args['orderby'] = $query['orderby'];
}
}
if ( isset( $query['order'] ) && $query['order'] ) {
$args['order'] = $query['order'];
}
// Posts count.
if ( isset( $attributes['postsCount'] ) && $attributes['postsCount'] ) {
$args['posts_per_page'] = $attributes['postsCount'];
}
// Filter.
$args = apply_filters( 'canvas_block_posts_query_args', $args, $attributes, $options );
// Avoid Duplicate.
if ( isset( $attributes['avoidDuplicatePosts'] ) && $attributes['avoidDuplicatePosts'] ) {
$main_posts = array();
if ( isset( $wp_query->posts ) && $wp_query->posts ) {
$main_posts = wp_list_pluck( $wp_query->posts, 'ID' );
}
if ( $main_posts ) {
$args['post__not_in'] = array_merge( $main_posts, $cnvs_posts );
} else {
$args['post__not_in'] = $cnvs_posts;
}
}
// Display related posts.
if ( isset( $attributes['relatedPosts'] ) && $attributes['relatedPosts'] ) {
$exclude_posts = array();
if ( $attributes['avoidDuplicatePosts'] ) {
$exclude_posts = $args['post__not_in'];
}
$related_args = array(
'ids' => null,
'offset' => 0,
'category' => null,
'tag' => null,
'time_frame' => null,
'orderby' => 'ID',
'order' => 'DESC',
'count' => isset( $args['posts_per_page'] ) ? $args['posts_per_page'] : 1,
'exclude_posts' => $exclude_posts,
);
$related_posts = cnvs_get_related_posts( $related_args );
if ( $related_posts ) {
$args['post__not_in'] = array();
$args['post__in'] = wp_list_pluck( $related_posts, 'ID' );
}
}
// Grouped posts.
if ( isset( $attributes['queryGroup'] ) && $attributes['queryGroup'] ) {
$group_ids = isset( $this->query_groups[ $attributes['queryGroup'] ] ) ? (array) $this->query_groups[ $attributes['queryGroup'] ] : array();
// Exclude grouped posts.
if ( ! empty( $group_ids ) ) {
$args['post__not_in'] = array_merge(
isset( $args['post__not_in'] ) ? (array) $args['post__not_in'] : array(),
$group_ids
);
// Remove excluded posts from `post__in`.
if ( isset( $args['post__in'] ) ) {
$args['post__in'] = array_diff( $args['post__in'], $group_ids );
}
}
}
// Set post status for attachment posts.
if ( isset( $query['posts_type'] ) && 'attachment' === $args['post_type'] ) {
$args['post_status'] = 'inherit';
}
$query = new WP_Query( $args );
if ( isset( $args['min_limit'] ) ) {
if ( $query->post_count < $args['min_limit'] ) {
return new WP_Query();
}
}
// Save posts ids from the current query in group.
if ( isset( $attributes['queryGroup'] ) && $attributes['queryGroup'] ) {
$group_ids = isset( $this->query_groups[ $attributes['queryGroup'] ] ) ? (array) $this->query_groups[ $attributes['queryGroup'] ] : array();
$new_group_ids = array();
if ( isset( $query->posts ) ) {
foreach ( $query->posts as $post ) {
$new_group_ids[] = $post->ID;
}
}
$new_group_ids = array_unique( $new_group_ids );
$this->query_groups[ $attributes['queryGroup'] ] = array_merge(
$group_ids,
$new_group_ids
);
}
// Save global IDs.
if ( isset( $query->posts ) ) {
foreach ( $query->posts as $post ) {
$cnvs_posts[] = $post->ID;
}
}
$cnvs_posts = array_unique( $cnvs_posts );
return $query;
}
/**
* Fires after the query variable object is created, but before the actual query is run.
*
* @param object $wp_query WP Query.
*/
public function pre_get_posts( &$wp_query ) {
if ( isset( $wp_query->query['is_post_query'] ) ) {
$offset = (int) $wp_query->get( 'offset' );
$paged = (int) $wp_query->get( 'paged' );
$posts_per_page = (int) $wp_query->get( 'posts_per_page' );
if ( $wp_query->is_paged ) {
$page_offset = $offset + ( ( $paged - 1 ) * $posts_per_page );
$wp_query->set( 'offset', $page_offset );
} else {
$wp_query->set( 'offset', $offset );
}
}
}
/**
* Filters the number of found posts for the query.
*
* @param int $found_posts The number of posts found.
* @param object $wp_query WP Query.
*/
public function found_posts( $found_posts, $wp_query ) {
if ( isset( $wp_query->query['is_post_query'] ) ) {
$offset = isset( $wp_query->query['offset'] ) ? $wp_query->query['offset'] : 0;
$found_posts = (int) $found_posts - (int) $offset;
}
return $found_posts;
}
/**
* Filter Register Locations
*
* @param array $locations List of Locations.
*/
public function share_buttons_location( $locations = array() ) {
$locations['block-posts'] = array(
'shares' => array( 'facebook', 'twitter', 'pinterest' ),
'name' => esc_html__( 'Block Posts', 'canvas' ),
'location' => 'block-posts',
'mode' => 'cached',
'before' => '',
'after' => '',
'display' => true,
'meta' => array(
'icons' => true,
'titles' => false,
'labels' => false,
),
// Display only the specified layouts and color schemes.
'fields' => array(
'display_count' => true,
'layouts' => array( 'simple' ),
'schemes' => array( 'simple-light', 'bold-light' ),
'count_locations' => array( 'inside' ),
),
'display_total' => false,
'display_count' => false,
'layout' => 'simple-light',
'scheme' => 'default',
'count_location' => 'inside',
);
return $locations;
}
}
new CNVS_Block_Posts();