How to use $current_user or is_user_logged_in() with FacetWP and WordPress to show different content for logged-in users

I have a membership site where I need to display certain FacetWP results to people who are logged in and other FacetWP results to people who are logged out. Unfortunately, FacetWP forgets WordPress’ global $current_user variable the minute you use one of the facets. Same with WordPress’ is_user_logged_in() function – FacetWP forgets it all once you start filtering results.

Lucky for you, I invested my last 3 days researching this issue, trying many many potential solutions, before finding the following little bit of code, which you can throw into your functions.php file:

<?php
/*
  Force FacetWP to use $current_user and is_user_logged_in() when selecting facets.
  via https://facetwp.com/how-to-pass-authentication-data-through-rest-api-requests/
	
  Please note that caching may interfere with the NONCE,
  causing ajax requests to fail. Please DISABLE CACHING for facet pages,
  or set the cache expiration to < 12 hours!
*/
add_action( 'wp_footer', function() {
?>
<script>
(function($) {
  $(function() {
    FWP.hooks.addFilter('facetwp/ajax_settings', function(settings) {
      settings.headers = {
        'X-WP-Nonce': FWP_JSON.nonce
      };
      return settings;
    });
  });
})(fUtil);
</script>
<?php
}, 100 );
?>

Everything works great now! One thing: As the code comment mentions, be aware that this solution might cause issues with cache. [source]

Alternate Solution: Page Refresh when facets are selected

FYI: An alternate and less-elegant solution to this same problem of FacetWP forgetting whether or not the current website visitor is logged in is to use a full page refresh every time a facet is selected. This is clunky, is a resource hog, but works in need! In fact, I almost went to press with this solution (until I discovered the more-elegant solution above). Add the following snippet to your functions.php to force a page refresh every time a FacetWP facet is selected:

<?php
/*
  Refresh the whole page every time a FacetWP facet option is changed.
  via https://gist.facetwp.com/gist/force-a-page-reload-on-facet-interaction/
*/
add_action( 'wp_footer', function() {
?>
<script>
document.addEventListener('facetwp-refresh', function() {
    if (FWP.loaded) {
        FWP.setHash();
        window.location.reload();
    }
});
</script>
<?php
}, 100 );
?>

[source]

Is this helpful?

Posted in

The Mighty Mo! Design Co.

RSS From Toby’s Blog

  • How Digital Ocean Cost Us Thousands of Dollars in a Single Day
    Here’s the rub for me: My belief is that bad stuff happens, and you need to own it. Digital Ocean definitely did not own it in this case. I wonder how the original founders of Digital Ocean would have reacted had they been in charge… For example, wouldn’t it be nice if an actual human… […]
  • Where uncertainty exists, don’t order specific.
    4 Idiot Case Studies with 2 simple age-old business lessons. The post Where uncertainty exists, don’t order specific. appeared first on Toby Cryns, WordPress Trainer in Minneapolis, MN.
  • “Now THAT was a good meeting!”
    A single effective meeting can change the course of history for a company. Imagine if you could lead effective meetings EVERY DAY! You can, but it takes curiosity & practice. This article is a good place to start your journey to a more effective you. The post “Now THAT was a good meeting!” appeared first […]

More posts from themightymo.com

How to merge multiple csv files via command line

How to merge multiple .csv files via command line

By The Mighty Mo! Design Co. | May 17, 2023

Today I downloaded 29 csv files with tax information. I could import those files 1 at a time into WooCommerce, but wouldn’t it be nice if I could merge them first and then only import a single file? The unix command is simple – just navigate to the folder with all the csv files and…

WordPress Security Services

15 Best WordPress Support and Maintenance Services for 2023: Ensuring Your Website Stays in Top Shape

By The Mighty Mo! Design Co. | April 27, 2023

Small business owners and non-profit leaders know that keeping your website secure, fast, and fully-functional is critical to success.  Here’s the unspoken truth: You can either learn how to do all that tech maintenance and development stuff yourself, or hire someone else to do it. But let’s face it, doing it yourself isn’t always the…

how to set up Cloudflare whitelist for ip

How to Whitelist SEM Rush IPs in Cloudflare

By The Mighty Mo! Design Co. | April 24, 2023

Alright, I’m going to show you how to whitelist a set of IPs on CloudFlare. In our case we use SEMrush and we want to make sure the SEMrush has full access to our sites.

RSS From Toby’s Blog

  • How Digital Ocean Cost Us Thousands of Dollars in a Single Day
    Here’s the rub for me: My belief is that bad stuff happens, and you need to own it. Digital Ocean definitely did not own it in this case. I wonder how the original founders of Digital Ocean would have reacted had they been in charge… For example, wouldn’t it be nice if an actual human… […]
  • Where uncertainty exists, don’t order specific.
    4 Idiot Case Studies with 2 simple age-old business lessons. The post Where uncertainty exists, don’t order specific. appeared first on Toby Cryns, WordPress Trainer in Minneapolis, MN.
  • “Now THAT was a good meeting!”
    A single effective meeting can change the course of history for a company. Imagine if you could lead effective meetings EVERY DAY! You can, but it takes curiosity & practice. This article is a good place to start your journey to a more effective you. The post “Now THAT was a good meeting!” appeared first […]