-
Notifications
You must be signed in to change notification settings - Fork 4
Home
Private Content is a plugin for WordPress that displays a portion of a post/page content only to users of a specific role or to a single or multiple users.
The action is performed using a shortcode, for example:
[private role="administrator"]Text for administrators[/private]
A note.
The text of this Wiki is available also in PDF. You can download it from here: https://github.com/aldolat/private-content.latex/blob/master/private-content.pdf.
-
Private Content
- Table of contents
- Description
- The shortcode command
-
The shortcode options
- Available options for the shortcode
- [role] Display a text portion to a certain role
- [reverse] Reverse the logic of hiding text
- The Administrator role
- [align] Align style
- [alt] Alternate text for excluded users
- [container] The HTML container for the text
- [id] Adding custom IDs for the HTML container
- [class] Adding custom classes for the HTML container
- Giving a style to the text generated by Private Content
- Capabilities created by Private Content plugin
- Available filters
- Testing the shortcode
This plugin provides a shortcode to display a portion of a post or page content only to users of a specific role. For example, you can show the hidden text to Editors or to Authors or to any other WordPress role.
Please, note that an Administrator can read an Editor private content or a Subscriber private content, and so on. Same thing for Editor, Author, Contributor, and Subscriber: a higher role can read a lower role content (in almost all cases, see below), according to the following WordPress roles schema in descending order:
- Administrator
- Editor
- Author
- Contributor
- Subscriber
Also you can show the hidden text only to a certain role. For example, you can mark a text as visible only to Contributors and hide it to higher roles, such as Administrators or Editors and so on.
As of version 3.0 you can mark a text as visible only to a certain user, using his login name.
As of version 4.0 you can mark a text as visible to multiple users, using their login names comma separated.
As of version 4.3 you can use either the usual private
shortcode or the extra ubn_private
, in case the first is already in use.
As of version 5.0 you can use the new option reverse
to change the logic of the recipient
option. If reverse
is activated, it will not allow users in recipient
read the private note.
As of version 6.0 you can use custom roles.
As of version 6.1 you can use multiple custom roles. Also Administrators can always read text for custom roles, unless a role="custom-only"
option has been used.
As of version 6.2 you can use custom IDs and/or classes for the HTML container.
As of version 6.4 you can use the post-author
and post-author-only
cases for the role
option.
The shortcode is private
:
[private {options}]Text[/private]
There is another shortcode available ubn_private
, that can be used in case private
is already taken by another plugin:
[ubn_private {options}]Text[/ubn_private]
These are the available options for the shortcode, that will be explained in the next sections of this page:
role
custom_role
recipient
reverse
align
alt
container
id
class
Accepted arguments:
administrator
editor
editor-only
author
author-only
contributor
contributor-only
subscriber
subscriber-only
-
visitor
orvisitor-only
(they are equivalent) none
custom
custom-only
post-author
post-author-only
post-author-custom
Let's see in detail.
Role | Result |
---|---|
administrator | The hidden text is shown to Administrators. |
editor | The hidden text is shown to Editors and Administrators. |
editor-only | The hidden text is shown to Editors only. |
author | The hidden text is shown to Authors, Editors, and Administrators. |
author-only | The hidden text is shown to Authors only. |
contributor | The hidden text is shown to Contributors, Authors, Editors, and Administrators. |
contributor-only | The hidden text is shown to Contributors only. |
subscriber | The hidden text is shown to Subscribers, Contributors, Authors, Editors, and Administrators. |
subscriber-only | The hidden text is shown to Subscribers only. |
visitor / visitor-only | The hidden text is shown only to non-logged-in users. Administrators can read the hidden text. |
none | When used, it is mandatory to use also the recipient option. The hidden text is shown only to users in the recipient list. Administrators cannot read the hidden text.
|
custom | When used, it is mandatory to use also the custom_role option. The hidden text is shown only to users that have a role in the custom_role list. Administrators can read the hidden text.
|
custom-only | When used, it is mandatory to use also the custom_role option. The hidden text is shown only to users that have a role in the custom_role list. Administrators cannot read the hidden text.
|
post-author | The hidden text is shown to the author of the post. Administrators can read the hidden text. |
post-author-only | The hidden text is shown to the author of the post only. Administrators cannot read the hidden text. |
post-author-custom | When used, it is mandatory to use also the custom_role option. The hidden text is shown publicly when the author of the post has a role in the custom_role list. Administrators cannot read the hidden text.
|
Here is an image of the cases for the role
option:
Display this text to Administrators:
[private role="administrator"]Text for Administrators[/private]
Display this text to Administrators and Editors:
[private role="editor"]Text for Editors[/private]
Display this text to Administrators, Editors, and Authors:
[private role="author"]Text for Authors[/private]
Display this text to Administrators, Editors, Authors, and Contributors:
[private role="contributor"]Text for Contributor[/private]
Display this text to Administrators, Editors, Authors, Contributors, and Subscribers:
[private role="subscriber"]Text for Subscribers[/private]
Display this text to the author of the current post:
[private role="post-author"]Text for author of the post[/private]
Display this text to everyone when the author of the post has the Marketing role:
[private role="post-author-custom" custom_role="marketing"]Text for everyone.[/private]
If you want to show a note only to a certain role, you have to use a {role}-only
option. In this way, for example, an Administrator or an Editor (roles higher than Author) cannot read a note for Authors only.
These are all the cases:
Display this text to Editors only:
[private role="editor-only"]Text for Editors only[/private]
Display this text to Authors only:
[private role="author-only"]Text for Authors only[/private]
Display this text to Contributors only:
[private role="contributor-only"]Text for Contributors only[/private]
Display this text to Subscribers only:
[private role="subscriber-only"]Text for Subscribers only[/private]
Display this text to Visitors only:
[private role="visitor-only"]Text for Visitors only[/private]
or the equivalent shortcode:
[private role="visitor"]Text for Visitors only[/private]
Display this text to the author of the current post only:
[private role="post-author-only"]Text for author of the post only[/private]
Display this text to Designers only (Designers is a custom role created by the user):
[private role="custom-only" custom_role="designers"]Text for Designers only[/private]
This is a special case: the hidden text is publicly shown when the author of the post has a certain role. In this case the logic of the behavior is inverted: here the plugin doesn't see the role of who is reading, but the role of the post author. If the author of the post belongs to a certain role, then the hidden text is shown to the public. Obviously the alt
option is available.
For example:
[private role="post-author-custom" custom_role="administrator" alt="The author of this post is NOT an administrator, so you can read the alternate text only."]Hidden text.[/private]
With this shortcode, if the post author is an administrator, the hidden text will be shown to the public, otherwise the alternate text will be displayed. If the alt
option is not used, nothing will be displayed. See the example below:
[private role="post-author-custom" custom_role="marketing"]Hidden text.[/private]
In this case, if the post author has the marketing
role, then the hidden text will be displayed. If the post author doesn't have the marketing
role, nothing will be displayed.
Accepted arguments:
- login name of the target user. You can use multiple login names, comma separated.
In the case you want to show a text only to a specific user, assign none
to role
and a login name to recipient
:
[private role="none" recipient="login-name"]Text for a specific user only[/private]
Change login-name
with the correct login name of the target user.
You can use a comma separated list of usernames to target certain users:
[private role="none" recipient="login-name1, login-name2, login-name3"]Text for specific users only[/private]
Change login-name1
, login-name2
, and login-name3
with the correct login names of the target users.
Accepted arguments:
- the custom role
- the custom roles, comma separated
If you want to show a text only to users of a custom role, use the option custom_role
.
For example:
[private role="custom" custom_role="designers"]Text for Designers group.[/private]
Please, note that texts for custom roles can be read also by Administrators. To avoid this, use the role="custom-only"
option, followed by the name of the custom role.
For example:
[private role="custom-only" custom_role="designers"]Text for Designers only[/private]
The option role=custom
can be used also for the WordPress standard roles, for example:
[private role="custom" custom_role="author"]Text for role Author.[/private]
In this case, Authors will read the private text, but higher roles (such as Editors) will not read it. It is like using a role-only option. Anyway, Administrators will read it. For more information, see the paragraph below.
If you want to show a text to multiple roles, you can enter them separated by a comma. For example:
[private role="custom" custom_role="designers,engineers"]Text for Designers and Engineers groups.[/private]
You can mix custom roles and standard WordPress roles, with a caveat.
For example:
[private role="custom" custom_role="designers,engineers,author"]Text for Designers, Engineers, and Authors group.[/private]
As you can see, Designers and Engineers are custom roles, while Author is a standard WordPress role. In the above example, Administrator will read the private text. Even in this case, as wrote before, you can use the role="custom-only"
option to avoid Administrators can read the private text:
[private role="custom-only" custom_role="designers,engineers,author"]Text for Designers, Engineers, and Authors group.[/private]
A note about using standard WordPress roles with role=custom
option.
If you use a standard WordPress role with the custom_role
option, you expect that a higher role can read the private text for lowers roles, i.e. a text for Author role should be read by Editor role (which is a role higher that Author). Actually, Editor role won't read that text. This is normal, because the option role="custom"
follows a path different than standard WordPress role management. It's like you'd use a role-only
option, in our example a role="author-only"
option. For example, this shortcode:
[private role="custom" custom_role="designers,engineers,author"]Text for Designers, Engineers, and Authors group.[/private]
will be read by Designers, Engineers, Authors, and Administrators, but not by Editors (even if Editors is a higher role that Author).
Accepted arguments:
-
1
- Activate the reverse option
The option reverse=1
is used when you want to hide a private text to some users or to some custom roles. Since it would be uncomfortable to add a lot of users/group in the shortcode, it is more convenient to tell the plugin to show the private text to all users/groups and hide it to some.
The reverse
option is available only with the following options:
- single users:
role=none
, adding also therecipient
option and thereverse
; - custom roles:
role=custom
, adding also thecustom_role
option and thereverse
.
See here below the two cases.
If you want to show a text to all users but not to some, activate the option reverse
, so that users added in the recipient
option will not read the note.
For example:
[private role="none" recipient="alice,bob,charlie" reverse=1]We all read this message while Alice, Bob, and Charlie can't read it![/private]
This shortcode will show the text to all users, excluding Alice, Bob, and Charlie (which cannot read the text).
You can use the reverse
option also when using roles. In this case you will not use the recipient
option, but simply in this way:
[private role="custom" custom_role="designers" reverse=1]Text for all roles, excluding Designers.[/private]
With this shortcode, all users will read the private message, while Designers will be excluded. If you define an alternate message with alt
option, Designers will read the alternate message only.
You can also exclude multiple roles. For example:
[private role="custom" custom_role="designers, engineers, author" reverse=1 alt="You can't read hidden texts because you are part of Designers and/or Engineers and/or Author roles"]Text for all roles, excluding Designers, Engineers, and Author roles.[/private]
Take note that Administrators will read the hidden text, even if the current Administrator has also one or more of the excluded roles. See the next paragraph for more information and also the table above.
The Administrator role is a special role in this plugin. This role can always read the hidden texts, unless one of these options has been used:
- a
{role}-only
option (excludingvisitor
andvisitor-only
); - a
none
(withrecipient
) option; - a
custom-only
option.
For example, let's say that the role Designers has been excluded from reading a hidden text. If an Administrator is reading that page and he has also the Designers role, he will read the hidden text. In the following example, Administrator (which has the Designer role too) can read the hidden text:
[private role="custom" custom_role="designers" reverse=1]Text for all roles, excluding Designers role.[/private]
In the following examples, instead, Administrators cannot read the hidden texts:
[private role="author-only"]Private note for Author.[/private]
[private role="post-author-only"]Private note for the author of the post.[/private]
[private role="none" recipient="john"]Private note for John.[/private]
[private role="custom-only" custom_role="engineers"]Private note for Engineers role.[/private]
Accepted arguments:
-
left
- Left align the paragraph -
center
- Center align the paragraph -
right
- Right align the paragraph -
justify
- Justify the paragraph
If you want to show an alternate text in case the reader can't read, you can use:
[private role="author" alt="You have not rights to read this."]Text for authors only[/private]
Please, take note that the alternate text, if defined, is always publicly displayed.
The alternate text can contain some HTML tags. The list is:
-
b
orstrong
for bold text; -
em
ori
for italic text; -
a
for links, withhref
andtitle
included. Forhref
andtitle
do not use double quote, but single quote.
For example:
[private role="subscriber" alt="<a href='https://www.example.com/subscribe' title='Subscribe now!'>Subscribe</a> to read this <strong>super powered</strong> text!"]Hidden text.[/private]
Starting from version 2.4, the user can choose the HTML container element for the text.
Accepted arguments:
-
p
- The default value; -
div
- This element allows you use HTML elements like lists, headings, and more. -
span
- This element allows you to add private content inline.
Usage:
Wrap the note inside a DIV:
[private container="div"]This is the text[/private]
Wrap the note inside a SPAN:
This is my home I bought a year ago [private container="span"](the key is under the doormat)[/private].
The user of the plugin can add custom IDs to the HTML container using the option id=name-of-the-id
, for example:
[private id="myid1, custom-id-2, my_id_3"]Private text.[/private]
The single ID names must be separated by a comma, not by a space. Also, if the ID is composed by more words, the words must be separated by a dash or by an underscore, otherwise the words will be considered as separated ID names.
The user of the plugin can add custom classes to the HTML container using the option class=name-of-the-class
, for example:
[private class="myclass1, custom-class-2, my_class_3"]Private text.[/private]
The single class names must be separated by a comma, not by a space. Also, if the class is composed by more words, the words must be separated by a dash or by an underscore, otherwise the words will be considered as separated class names. Only consider that underscores in login names will be changed into a dash, starting from version 6.4.0.
The text generated by this plugin uses some CSS classes, listed here:
-
private
- Applied to each HTML element generated by this plugin. -
{role}-content
- Applied to the text for a particular role. Here is the complete list:administrator-content
editor-content
author-content
contributor-content
subscriber-content
visitor-content
-
user-content
- When used for specific user(s).-
user-only
- When used for specific user(s). This class is always preceded byuser-content
class. -
{user_login}-only
- When used for specific user(s). The placeholder{user_login}
will be changed into the actual login name. This class is always preceded byuser-content
anduser-only
classes. -
user-only-reverse
- When thereverse
option is used. This class is always preceded byuser-content
class.
-
-
{custom_role}-content
- When used for custom roles. The placeholder{custom_role}
will be changed into the actual custom role.
-
{role}-only
- Applied to the text for a specific role. This class is always preceded by{role}-content
class. -
post-author-custom
- Applied to the text when thepost-author-custom
option is used. This class is always followed by{user_login}-content
and{custom_role}
class. The placeholders{user_login}
and{custom_role}
will be changed into the actual login name and custom role respectively. -
{custom-id-names}
- Added when specified by the user. -
{custom-class-names}
- Added when specified by the user. -
alt-text
- Applied to the alternate text.
These are the capabilities created by this plugin:
read_ubn_editor_notes
read_ubn_author_notes
read_ubn_contributor_notes
read_ubn_subscriber_notes
These capabilities will be removed when the plugin is uninstalled using the usual uninstallation command in the WordPress Dashboard.
-
ubn_private_align_style
- Filters the style string. An example of a string is:
$align_style = ' style="text-align: justify;"';
Please note the leading space before style=
.
-
ubn_private_containers
- Filters the array containing the HTML container for the private and alternate text.
An example is:
$containers = array(
'open' => '<p',
'close' => '</p>',
);
Notice that the first element of the array must not have the closing >
.
-
ubn_private_content
- Filters the private content. -
ubn_private_alt
- Filters the alternate content. -
ubn_private_text
- Filters the entire private and alternate text, just before the output. The string contains also the HTML container. -
ubn_private_text_empty
- Filters the text if it is empty, just before the output. -
ubn_private_class_selector
- Filters the HTML output for the classes. -
ubn_private_id_selector
- Filters the HTML output for the IDs.
It could be useful to test if the shortcode is working as intended. To do this, you can use a plugin that lets you temporarily switch between accounts. The plugin is User Switching.