WordPress.org

Ready to get started?Download WordPress

Forums

Filtering navigation with pre_get_posts (1 post)

  1. DancesWithDingo
    Member
    Posted 1 year ago #

    I am trying to create a plugin to create a custom post type to track a user's progress through a ten week program we offer. I have defined a custom post type (to simplify things here we'll call it "week") and created a post for each of the ten weeks. If a user is on week 3, I want to filter the week posts so that they are unable to view weeks beyond their current point.

    I accomplished this by using "pre_get_posts" as listed below. This works as I would expect, however it does not seem to impact the calls to next_post_link. For example, when viewing week 3 during week 3, a link still appears for week 4 (although it is a dead link).

    What is the proper way to impact a query so next_post_link does not emit a link on the last filtered post?

    Code so far:

    function xyz_pre_get_posts($query) {
        global $currentWeek;
        if ($query->is_main_query() && !is_admin() && is_single() && 'week' == $query->query_vars['post_type']) {
            $meta_query = array(
                array(
                    'key' => 'week',
                    'value' => $currentWeek,
                    'compare' => '<='
                )
            );
            $query->set( 'meta_query', $meta_query );
        }
    }
    add_action('pre_get_posts', 'xyz_pre_get_posts');

Topic Closed

This topic has been closed to new replies.

About this Topic

  • RSS feed for this topic
  • Started 1 year ago by DancesWithDingo
  • This topic is not resolved
  • WordPress version: 3.5.1