screen->get_prefix();
// We use Tainacan own method for obtaining previous and next item objects
if (function_exists('tainacan_get_adjacent_items') && isset($_GET['pos'])) {
$adjacent_items = tainacan_get_adjacent_items();
if (isset($adjacent_items['next'])) {
$next_link_url = $adjacent_items['next']['url'];
$next_title = $adjacent_items['next']['title'];
} else {
$next_link_url = false;
}
if (isset($adjacent_items['previous'])) {
$previous_link_url = $adjacent_items['previous']['url'];
$previous_title = $adjacent_items['previous']['title'];
} else {
$previous_link_url = false;
}
} else {
//Get the links to the Previous and Next Post
$previous_link_url = get_permalink( get_previous_post() );
$next_link_url = get_permalink( get_next_post() );
//Get the title of the previous post and next post
$previous_title = get_the_title( get_previous_post() );
$next_title = get_the_title( get_next_post() );
}
// Then we obtain blocksy settings
$has_thumb = get_theme_mod($prefix . '_has_post_nav_thumb', 'yes') === 'yes';
$has_title = get_theme_mod($prefix . '_has_post_nav_title', 'yes') === 'yes';
$previous = '';
$next = '';
if ($has_thumb) {
$previous_thumb = '';
$next_thumb = '';
if (function_exists('tainacan_get_adjacent_items') && isset($_GET['pos'])) {
if ($adjacent_items['next']) {
$next_thumb = $adjacent_items['next']['thumbnail']['tainacan-medium'][0];
}
if ($adjacent_items['previous']) {
$previous_thumb = $adjacent_items['previous']['thumbnail']['tainacan-medium'][0];
}
} else {
//Get the thumnail url of the previous and next post
$previous_thumb = get_the_post_thumbnail_url( get_previous_post(), 'tainacan-medium' );
$next_thumb = get_the_post_thumbnail_url( get_next_post(), 'tainacan-medium' );
}
$previous_post_image_output = $previous_thumb ? blocksy_simple_image(
$previous_thumb,
[
'inner_content' => '',
'ratio' => '1/1',
'tag_name' => 'figure'
]
) : '';
$next_post_image_output = $next_thumb ? blocksy_simple_image(
$next_thumb,
[
'inner_content' => '',
'ratio' => '1/1',
'tag_name' => 'figure'
]
) : '';
}
// Creates the links
$previous = $previous_link_url === false ? '' : (
' ' .
($has_thumb ? $previous_post_image_output : '') .
'' .
'' . __( 'Previous item', 'tainacan-blocksy' ) . '' .
(( !empty( $previous_title ) && $has_title ) ? ('' . $previous_title . '') : '') .
'
'.
'');
$next = $next_link_url === false ? '' : (
' ' .
'' .
'' . __( 'Next item', 'tainacan-blocksy') . '' .
(( !empty( $next_title ) && $has_title) ? ('' . $next_title . '') : '') .
'
' .
($has_thumb ? $next_post_image_output : '') .
'');
return ['next' => $next, 'previous' => $previous];
}
}
/**
* Copy of blocksy original post navigation function.
* Check inc/template-tags.php post navigation file on the parent theme
*/
if ( !function_exists('blocksy_default_post_navigation') ) {
function blocksy_default_post_navigation() {
$next_post = apply_filters(
'blocksy:post-navigation:next-post',
get_adjacent_post(false, '', true)
);
$previous_post = apply_filters(
'blocksy:post-navigation:previous-post',
get_adjacent_post(false, '', false)
);
if (! $next_post && ! $previous_post) {
return '';
}
$prefix = blocksy_manager()->screen->get_prefix();
$container_class = 'post-navigation';
$container_class .= ' ' . blocksy_visibility_classes(get_theme_mod(
$prefix . '_post_nav_visibility',
[
'desktop' => true,
'tablet' => true,
'mobile' => true,
]
));
$post_slug = get_post_type() === 'post' ? __( 'Post', 'blocksy' ) : get_post_type_object( get_post_type() )->labels->singular_name;
$post_slug = '' . $post_slug . '';
$has_thumb = get_theme_mod($prefix . '_has_post_nav_thumb', 'yes') === 'yes';
$has_title = get_theme_mod($prefix . '_has_post_nav_title', 'yes') === 'yes';
$next_post_image_output = '';
$previous_post_image_output = '';
if ($next_post) {
$next_title = '';
if ($has_title) {
$next_title = $next_post->post_title;
}
if ($has_thumb && get_post_thumbnail_id($next_post)) {
$next_post_image_output = blocksy_image(
[
'attachment_id' => get_post_thumbnail_id( $next_post ),
'ratio' => '1/1',
'inner_content' => '',
'tag_name' => 'figure'
]
);
}
}
if ($previous_post) {
$previous_title = '';
if ( $has_title ) {
$previous_title = $previous_post->post_title;
}
if ($has_thumb && get_post_thumbnail_id($previous_post)) {
$previous_post_image_output = blocksy_image(
[
'attachment_id' => get_post_thumbnail_id( $previous_post ),
'ratio' => '1/1',
'inner_content' => '',
'tag_name' => 'figure'
]
);
}
}
ob_start();
?>
screen->get_prefix();
if (get_theme_mod( $prefix . '_has_post_nav', $prefix === 'single_blog_post' ? 'yes' : 'no' ) === 'yes') {
$container_class = 'post-navigation';
$container_class .= ' ' . blocksy_visibility_classes(get_theme_mod(
$prefix . '_post_nav_visibility',
[
'desktop' => true,
'tablet' => true,
'mobile' => true,
]
));
$has_thumb = get_theme_mod($prefix . '_has_post_nav_thumb', 'yes') === 'yes';
if ($has_thumb)
$container_class .= ' has-thumbnails';
$adjacent_links = [
'next' => '',
'previous' => ''
];
$adjacent_links = tainacan_blocksy_get_adjacent_item_links();
$previous = $adjacent_links['previous'];
$next = $adjacent_links['next'];
}
if ($previous !== '' || $next !== '') {
echo '';
};
}
}
/**
* The following has to happen on hook plugins_loaded because the parent theme
* has already declared the function in the plugin lifecycle, somehting that
* is not necessary if on a child theme.
*/
if (!TAINACAN_BLOCKSY_IS_CHILD_THEME) {
function tainacan_blocksy_after_theme_setup() {
/**
* Overrides parent theme blocksy post navigation logic to handle items navigation
*/
function blocksy_post_navigation() {
// This should only happen if we have Tainacan plugin installed
if ( defined ('TAINACAN_VERSION') ) {
$collections_post_types = \Tainacan\Repositories\Repository::get_collections_db_identifiers();
$post_type = get_post_type();
// Check if we're inside the main loop in a single Post.
if (in_array($post_type, $collections_post_types) && is_singular() && in_the_loop() && is_main_query() ) {
return tainacan_blocksy_item_navigation();
}
}
return blocksy_default_post_navigation();
}
}
add_action( 'plugins_loaded', 'tainacan_blocksy_after_theme_setup' );
} else {
/**
* Overrides parent theme blocksy post navigation logic to handle items navigation
*/
function blocksy_post_navigation() {
// This should only happen if we have Tainacan plugin installed
if ( defined ('TAINACAN_VERSION') ) {
$collections_post_types = \Tainacan\Repositories\Repository::get_collections_db_identifiers();
$post_type = get_post_type();
// Check if we're inside the main loop in a single Post.
if (in_array($post_type, $collections_post_types) && is_singular() && in_the_loop() && is_main_query() ) {
return tainacan_blocksy_item_navigation();
}
}
return blocksy_default_post_navigation();
}
}
/**
* Uses Blocksy filter to customize the related posts logic on Tainacan Items page. (NOT IN USE YET)
*/
if ( !function_exists('tainacan_blocksy_custom_related_posts_query') ) {
function tainacan_blocksy_custom_related_posts_query( $related_posts_query ) {
// This should only happen if we have Tainacan plugin installed
if ( defined ('TAINACAN_VERSION') ) {
$collections_post_types = \Tainacan\Repositories\Repository::get_collections_db_identifiers();
$post_type = get_post_type();
// Check if we're inside the main loop in a single Post.
if (in_array($post_type, $collections_post_types) && is_singular() && in_the_loop() && is_main_query() ) {
// In the future, we might update the related_post_query here for Tainacan items.
}
}
return $related_posts_query;
}
}
//add_filter( 'blocksy:related-posts:query-args', 'tainacan_blocksy_custom_related_posts_query', 10 );
/**
* Uses Blocksy filter to add custom link on the item breadcrumb
*/
if ( !function_exists('tainacan_blocksy_custom_breadcrumbs') ) {
function tainacan_blocksy_custom_breadcrumbs( $array ) {
// This should only happen if we have Tainacan plugin installed
if ( defined ('TAINACAN_VERSION') ) {
$collections_post_types = \Tainacan\Repositories\Repository::get_collections_db_identifiers();
$post_type = get_post_type();
// Check if we're inside a taxonomy archive
if ( in_array($post_type, $collections_post_types) && is_tax() ) {
$collection_archive_link_index = -1;
for ($i = 0; $i < count($array); $i++) {
if ( isset($array[$i]['url']) && $array[$i]['url'] == get_post_type_archive_link($post_type) ) {
$collection_archive_link_index = $i;
break;
}
}
if ( $collection_archive_link_index ) {
$term = get_queried_object();
if ( $term ) {
$taxonomy = get_taxonomy( $term->taxonomy );
if ( $taxonomy && $taxonomy->labels )
$array[$collection_archive_link_index] = [ "name" => $taxonomy->labels->singular_name ];
$array[] = [ "name" => __('Items', 'blocksy-tainacan') ];
}
}
}
// Check if we're inside a collection archive.
else if ( in_array($post_type, $collections_post_types) && is_archive() ) {
$array[] = [ "name" => __('Items', 'blocksy-tainacan') ];
}
// Check if we're inside the main loop in a single Post.
else if ( in_array($post_type, $collections_post_types) && is_singular() && in_the_loop() && is_main_query() ) {
$args = $_GET;
for ($i = 0; $i < count($array); $i++) {
// Check if the current thumbnail links to the collection, then enriches its URL
if (
isset($array[$i]['url']) &&
isset($args['ref']) &&
substr($array[$i]['url'], -strlen($args['ref']))===$args['ref']
) {
$ref = $args['ref'];
unset($args['pos']);
unset($args['ref']);
unset($args['source_list']);
$array[$i]['url'] = $ref . '?' . http_build_query(array_merge($args));
break;
}
}
return $array;
}
}
return $array;
}
}
add_filter( 'blocksy:breadcrumbs:items-array', 'tainacan_blocksy_custom_breadcrumbs', 10, 3 );
/**
* Retrieves an item adjacent link, either using WP strategy or Tainacan plugin tainacan_get_adjacent_items()
*/
if ( !function_exists('blocksy_tainacan_the_taxonomies_pagination') ) {
function blocksy_tainacan_the_taxonomies_pagination($total_terms, $args = []) {
global $wp_query;
$allowed_prefixes_args = [
'allowed_prefixes' => [
'blog',
'woo_categories'
],
'default_prefix' => 'blog'
];
$args = wp_parse_args(
$args,
[
'query' => $wp_query,
'prefix' => blocksy_manager()->screen->get_prefix(
$allowed_prefixes_args
),
'has_pagination' => '__DEFAULT__',
'pagination_type' => '__DEFAULT__',
'last_page_text' => __('No more posts to load', 'blocksy'),
'total_pages' => null,
'current_page' => null,
'format' => null,
'base' => null
]
);
$args['prefix'] = blocksy_manager()->screen->process_allowed_prefixes(
$args['prefix'],
$allowed_prefixes_args
);
if ($args['has_pagination'] === '__DEFAULT__') {
$args['has_pagination'] = get_theme_mod(
$args['prefix'] . '_has_pagination',
'yes'
) === 'yes';
}
if ($args['pagination_type'] === '__DEFAULT__') {
$args['pagination_type'] = get_theme_mod(
$args['prefix'] . '_pagination_global_type',
'simple'
);
}
$button_output = '';
if (
$args['pagination_type'] === 'load_more'
&&
intval($args['current_page']) !== intval($args['total_pages'])
) {
$label_button = get_theme_mod(
$args['prefix'] . '_load_more_label',
__('Load More', 'blocksy')
);
$button_output = '';
}
if (
$args['pagination_type'] !== 'simple'
&&
$args['pagination_type'] !== 'next_prev'
) {
if (intval($args['current_page']) === intval($args['total_pages'])) {
return '';
}
$button_output = '
' . $button_output;
$button_output .= '
';
$button_output .= '
' . $args['last_page_text'] . '
';
$button_output .= '
';
}
$pagination_class = 'ct-pagination';
$divider_output = '';
$divider = get_theme_mod(
$args['prefix'] . '_paginationDivider',
[
'width' => 1,
'style' => 'none',
'color' => [
'color' => 'rgba(224, 229, 235, 0.5)',
]
]
);
$numbers_visibility = get_theme_mod(
$args['prefix'] . '_numbers_visibility',
[
'desktop' => true,
'tablet' => true,
'mobile' => false
]
);
$arrows_visibility = get_theme_mod(
$args['prefix'] . '_arrows_visibility',
[
'desktop' => true,
'tablet' => true,
'mobile' => true
]
);
if (
$divider['style'] !== 'none'
&&
$args['pagination_type'] !== 'infinite_scroll'
) {
$divider_output = 'data-divider';
}
$template = '
';
$current_args = \Tainacan\Theme_Helper::get_instance()->get_taxonomies_query_args();
$paginate_links_args = [
'format' => '?termspaged=%#%',
'total' => ceil( $total_terms / $current_args['perpage'] ),
'current' => max( 1, get_query_var('termspaged') ),
'add_args' => array(
'order' => $current_args['order'],
'orderby' => $current_args['orderby'],
'perpage' => $current_args['perpage'],
'search' => $current_args['search'],
'termsparent' => $current_args['termsparent'],
),
'mid_size' => 3,
'end_size' => 0,
'type' => 'array',
'prev_text' => '' . __('Prev', 'blocksy'),
'next_text' => __('Next', 'blocksy') . ' ',
];
if ($args['base']) {
$paginate_links_args['base'] = $args['base'];
}
if ( $total_terms <= $current_args['perpage'] )
return '';
$links = paginate_links($paginate_links_args);
$arrow_links = ['', ''];
$proper_links = [];
foreach ($links as $link) {
preg_match('/class="[^"]+"/', $link, $matches);
if (count($matches) === 0) {
continue;
}
if (
$args['pagination_type'] === 'next_prev'
&&
strpos($matches[0], 'next') === false
&&
strpos($matches[0], 'prev') === false
) {
continue;
}
if (
$args['pagination_type'] === 'simple'
&&
(
strpos($matches[0], 'next') !== false
||
strpos($matches[0], 'prev') !== false
)
) {
$link = str_replace(
'page-numbers',
trim('page-numbers ' . blocksy_visibility_classes(
$arrows_visibility
)),
$link
);
}
if (
strpos($matches[0], 'next') !== false
||
strpos($matches[0], 'prev') !== false
) {
$arrow_links[strpos($matches[0], 'next') !== false ? 1 : 0] = $link;
} else {
$proper_links[] = $link;
}
}
$proper_links = join("\n", $proper_links);
if ($args['pagination_type'] === 'simple') {
$proper_links = '' . $proper_links . '
';
}
echo sprintf(
$template,
$arrow_links[0] . $proper_links . $arrow_links[1],
$button_output
);
}
}
?>