Context: We created a plugin, that allows posts to be either in web, mobile app or both. This is done via meta key. When shown only in mobile app mode, then its hidden from web. The plugin code, that filters with meta.
Problem: While it is hidden from search, general posts and direct. But it is still visible in the next prev navigations under the posts content. We need to filter the post navigation somehow based on meta key.
I can see where the get_the_post_navigation()
function is located and I can see in the theme, where <?php if( get_theme_mod( 'post_navigation', false ) === false ) the_post_navigation(); ?>
is located.
Can get_the_post_navigation or post_navigation be filtered using meta values, or only option is to not use the post_navigation completely, and make a custom function to show next and prev. Similar to this answer.
The content-single.php is the initiator for the_post_navigation() as so:
<?php if( get_theme_mod( 'post_navigation', false ) === false ) the_post_navigation(); ?>
the_post_navigation() located inside wp-includes/link-template.php:
function the_post_navigation( $args = array() ) {
echo get_the_post_navigation( $args );
}
And the get_the_post_navigation() inside the link-template as well:
function get_the_post_navigation( $args = array() ) {
// Make sure the nav element has an aria-label attribute: fallback to the screen reader text.
if ( ! empty( $args['screen_reader_text'] ) && empty( $args['aria_label'] ) ) {
$args['aria_label'] = $args['screen_reader_text'];
}
$args = wp_parse_args(
$args,
array(
'prev_text' => '%title',
'next_text' => '%title',
'in_same_term' => false,
'excluded_terms' => '',
'taxonomy' => 'category',
'screen_reader_text' => __( 'Post navigation' ),
'aria_label' => __( 'Posts' ),
)
);
$navigation = '';
$previous = get_previous_post_link(
'<div class="nav-previous">%link</div>',
$args['prev_text'],
$args['in_same_term'],
$args['excluded_terms'],
$args['taxonomy']
);
$next = get_next_post_link(
'<div class="nav-next">%link</div>',
$args['next_text'],
$args['in_same_term'],
$args['excluded_terms'],
$args['taxonomy']
);
// Only add markup if there's somewhere to navigate to.
if ( $previous || $next ) {
$navigation = _navigation_markup( $previous . $next, 'post-navigation', $args['screen_reader_text'], $args['aria_label'] );
}
return $navigation;
}