Many WordPress membership sites have sets of content that are for members only. While plugins like WooCommerce Memberships can show members what content is available to them as part of their plan, there is one element that would be helpful for many sites with membership content: a sense of progress for members to see which posts or pages they’ve read or not read.

WP Complete helps to solve this problem, and works for almost any membership site to allow members (or students for courses) to mark a page as “complete” when they’ve viewed or read it. There’s also a premium version available to let you customize how completion buttons are shown, add more than one completion “step”, and use shortcodes to show completion progress.

Adding completion status to your content

Once you’ve installed WPComplete on your membership site, there are a couple settings to configure to let members track content progress. With the free version, you won’t have too much to do other than adjusting button text on your site for marking content as completed:

WPComplete settings 1

As well as what to show when that content has already been completed:

WPComplete settings 2

Setup is therefore pretty easy, and can be done in minutes. From there, you’ll have one new setting added to your content (posts, pages, etc.): whether that content is “complete-able” or not. If you enable that content as complete-able, then an action to complete it will be shown to logged-in users on your site. For a membership site, I’d recommend marking your members-only content or courses as complete-able.

WPComplete enable for content

Once you’ve done so, you’ll see a “complete” action on your site that lets members track content progress and mark that content as completed.

WPComplete complete post

Once a member has completed that content, it will always be marked as “completed” unless they choose to un-complete it.

WPComplete completed post

If you have other logged-in customers on your site, you may want to consider the premium version, which lets you determine which users can complete content.

If you use WooCommerce Memberships, you can also restrict tracking content progress to members via shortcodes instead.

Using WPComplete with WooCommerce Memberships

WPComplete works pretty well out of the box with WooCommerce Memberships, but there are a couple refinements we can make to improve the member experience on the site and to help members track content progress.

First, you can choose to restrict showing the “Completion” button to specific members only by using the built-in Memberships shortcodes. For example, if you only want members to see the completion button for a specific post, you can wrap it in the wcm_restrict shortcode:

[wcm_restrict plans="platinum"][wpc_button][/wcm_restrict]

Non-members will not see the completion buttons if content is restricted, as it will be cut off before that point:

WooCommerce Memberships restricted post

Second, while seeing whether content has been completed or not in the blog archives is useful, this can be made even better by showing whether content has been completed or not in the members area. We can customize the “My content” section to show whether content has already been completed or not. I’ll use the tips in this post to do so.

First, I’ll add a snippet to where I keep custom code to adjust the columns in the “My content” section.

/**
 * Add a "Completed" column to the "My Content" table in the members area.
 * Removes the "Type" column.
 *
 * @param array $columns the columsn in the "My Content" table
 * @return array $columns the updated array of columns
 */
function sv_wc_memberships_my_content_table_add_column( $columns ) {

    $new_columns = array();

    // only modify the columns if the WPComplete plugin is active
    if ( class_exists( 'WPComplete' ) ) {

        // unset the "type" column, which shows post, page, etc
        unset( $columns['membership-content-type'] );

        foreach ( $columns as $column_id => $column_name ) {

            $new_columns[ $column_id ] = $column_name;

            // insert our new "Complete" column after the "Title" column
            if ( 'membership-content-title' === $column_id ) {
                $new_columns['membership-content-completed'] = __( 'Complete?', 'your-textdomain' );
            }
        }
    }

    return ! empty( $new_columns ) ? $new_columns : $columns;
}
add_filter( 'wc_memberships_members_area_my_membership_content_column_names', 'sv_wc_memberships_my_content_table_add_column', 11 );

Next, I need to fill this content in when WPComplete is active to show whether the post has been marked “complete” or not by my member.

/**
 * Fills the "Complete?" column with the completion status.
 *
 * @param \WP_Post $post the post object used for the row's display
 */
function sv_wc_memberships_my_content_table_add_column_content( $post ) {

    if ( class_exists( 'WPComplete_Public') ) {

        $plugin = new WPComplete();
        $public = new WPComplete_Public( $plugin->get_plugin_name(), $plugin->get_version() );

        switch( $public->post_completion_status( $post->ID ) ) {

            case 'not complete-able':
                $value = '<span title="not complete-able">&ndash;</span>';
            break;

            case 'incomplete':
                $value = '<span title="incomplete">&#10060;</span>';
            break;

            // this only exists in WPComplete premium, but including it for completeness
            case 'partial':
                $value = '<span title="partially completed">&#128338;</span>';
            break;

            case 'completed':
                $value = '<span title="completed">&#9989;</span>';
            break;

            default:
                $value = '';
        }

        // no escaping given we're being explicit with value above
        echo $value;
    }
}
add_action( 'wc_memberships_members_area_my_membership_content_column_membership-content-completed', 'sv_wc_memberships_my_content_table_add_column_content' );

(You can view the entire snippet here).

That’s all it takes! Now the “My content” area will replace the “Type” column with a column for completion status, helping members track content progress for each piece of content in their list.

WooCommerce Memberships WPComplete members area

Updated members area

One quick note: I’ve made a couple small styling tweaks, so you could add this custom CSS to your site as well to center this column and change the cursor when hovering over it.

table.shop_table_responsive tbody tr td.membership-content-completed,
table.shop_table_responsive thead tr th.membership-content-completed { 
    text-align:center;
}

table.shop_table_responsive tbody tr td.membership-content-completed {
    cursor: help;
}

Conclusion

WPComplete can help your members get a concept of progress as they navigate your site by marking membership content as completed while they’re reading. It works with most membership plugins pretty easily out of the box, and there are some small changes you can make, as you’ve seen above, to tie it tightly to your membership plugin of choice.


Note: This post may contain affiliate links, which means we get a commission from the plugin, theme, or service provider if you choose to purchase. Regardless of this, we are committed to providing high quality, unbiased resources. Have more questions? See our affiliate policy. You can use the plain links below if you prefer that we not receive a referral commission:

Your WooCommerce store can drive additional revenue by improving your email marketing. Try Jilt for free to increase sales with abandoned cart recovery emails, post-purchase follow-ups, and more!
Articles you may also like:

Posted by Beka Rice

Beka Rice manages the direction of Sell with WP content and writes or edits most of our articles to share her interests in eCommerce. Or she just writes as an excuse to spend more time jamming out to anything from The Clash to Lady Gaga. Who knows.

Leave a reply

Your email address will not be published. Required fields are marked *