This tutorial shows how Bricks builder‘s bricks/element/render filter can be used to conditionally output elements having a class of logged-in to logged-in users only and elements having a class of logged-out to visitors that are not logged in.
Add the following in child theme’s functions.php or in a code snippets plugin:
add_filter( 'bricks/element/render', function( $render, $element ) {
// Get the element CSS classes
$classes = ! empty( $element->attributes['_root']['class'] ) ? $element->attributes['_root']['class'] : false;
// Check if the element has the special class "logged-in"
if ( $classes && in_array( 'logged-in', $classes ) ) {
return is_user_logged_in();
}
// Check if the element has the special class "logged-out"
if ( $classes && in_array( 'logged-out', $classes ) ) {
return ! is_user_logged_in();
}
return $render;
}, 10, 2 );
With this in place, for any element that you wish to be output only for users that are logged into your Bricks WordPress site, simply add this class: logged-in
For any element that should be output only for visitors that are not logged in, add this class: logged-out
Sample use case: Render separate menus for logged-in users and logged-out visitors.
Reference
https://academy.bricksbuilder.io/article/filter-bricks-element-render/
6 comments
Ernest
Hello Sridhar, thanks for sharing this solution, but i have a question, how can apply this code to the entire page not only for each element, image i have dozen of sections in a page that i need to be only visible for login users and i will have to put the .logged-in class in each element. Bricks have the option to put a class to the entire page in: Page Settings / CSS classes (body) but the class .logged-in is not working that way, so, can you please tell how apply that class to entire page?
Thanks in advance.
Ernest.
Sridhar Katakam
Are these for the standard
pagepost type pages? If so, do you currently have a Bricks template for that post type?Ernest
Yes, standard pages, i need build a custom user-author dashboard page, with welcome message, and lots of other sections but i would like to "hide" all the content until user login, not classing each section by section but all the page itself, i don't know if that is possible i search all over the internets and didn't find a proper solution for that.
Thanks Sridhar!
Sridhar Katakam
One straight forward way is to wrap the entire content of your Page in a div and set the
logged-inclass on it.eins walter
If I understand right, we still cannot add condition as Class like this without code, right?
Sridhar Katakam
Yes.