Product Support

Participant Log

Adds a dynamic list of entries to each record. Log work hours, attendance records, list your collection, places you've been...adds a whole new dimension to your Participants Database record.

Product Setup

Global Log Configuration

In the Participants Database admin menu will be an item named “Participant Log.” On that page you will find the global settings for all logs under the “General Settings” tab. This is where you set things like the template (which controls the layout) and other general settings for all the logs. These settings can be individually overridden in the log field definition if needed.

Setting up the Log

The first thing to do to set up a log is to add a new “Participant Log” field to the Participants Database on the Manage Database Fields page. This new field is the “container” for the log, and in most ways is simply another field in the database. The General Settings tab of the plugin settings menu provides a way to add a new log. When this field is created, a new table is added to your WordPress database which will hold the data for the log.

It is important that the name of your log should be the name of what is stored in it. If, for example, the log is meant to record a person’s time spent volunteering, you might call it “Volunteer Hours.” If it is storing a record of class attendance, you could call it “Class Attendance” or “Attendance Record.” You can change the title that is displayed once it is set up, but the name of the log field can’t be changed, so it’s worth taking a minute to think about what you call it before committing the name. Once you set up the log field, you can configure what is recorded in each entry of the log you created.

log field structure diagram
Example setup for an attendance log

Configuring the Log

On the Participant Log admin page, you will see a tab for the log you created. Under that tab you can configure the log: you can set the name for an entry or entries which will help the user interface make more sense. There are more settings that determine what the frontend user can do and also how the log will be displayed in various contexts. This will be explained in more detail later.

Configuring Log Entry Fields

Each log can have as many fields as needed to hold whatever information you need to store in each entry. The user interface for that is the same used for managing the fields in the main database. You can add fields, and then configure each field as needed. They work the same as fields in the main database. Each entry field you create for the log adds a column to the log’s database table.

An example of a set of fields defined for a work log.

Field Visibility

Entry fields have a “Visibility” setting that determines the context in which the entry field will be shown. “Public” means the field will be shown in all contexts. “Private” means the field will only be shown to the owner of the record and administrators. “Admin” means the field will be visible to administrators only.

Searchable Fields

When list searching is enabled, only fields that are both visible and marked as searchable will be used to get search results. This is helpful to making searches more efficient and avoids spurious results.

Searchable log entry fields are also available in regular Participants Database list displays so that records with log entries that match the search can be found.

Sortable Fields

Fields that have this setting enabled will be shown in the header of log entry list displays so the log can be sorted by the value of that field.

Field Validation

Entry fields can be made required in the entry field’s configuration. The entry fields use “client side validation” which means the user’s browser will perform the validation and provide the feedback. This is going to look slightly different on every platform, there is little you can do about that, but it has the upside of working on all platforms and devices. To make a field required, you set the validation setting to “required.” You can add to the field validation configuration by using validation attributes.

The Admin Record Log Display

The log display on the record edit page in the admin shows a list of all the entries. The list is paginated, and the number of entries shown on each page of entries is determined in the general settings for the log, in the “Entries Per Page” setting.

The display for the log on the frontend is similar, but what controls are shown depends on the configuration.

Entry List Filtering or  Searching

There is a search input at the top, any text typed into the search input will be used to filter the list of entries. On the admin side, all the visible entry fields are included in the search. On the frontend, only fields marked as “searchable” will be included in the search.

Entry List Sorting

The entries can be sorted by clicking on the blue arrow icons seen in the top bar. The fields that can be used for sorting are configured in the log entry fields configurations: check the “Sortable” checkbox to configure the field to appear in the sorting bar.

Adding Entries

Once you have the entry fields set up, you can begin adding entries to the log. Entries can be added in the admin by going to the admin edit record page for the record you want to add log entries to. Find your log field on the edit record page and in the display for the log field, you will see a button with a plus sign for adding a new entry. Clicking that will bring up a form for entering the data for your log entry. Each entry may also be edited by clicking the pencil icon next to the entry. Clicking the pencil will open a form where the contents of the entry can be changed. Entries can be deleted individually by clicking the red on the entry line. When the “X” is clicked, you will be asked to confirm deleting the entry. There is no undo, deleted entries are gone forever unless you restore it from a backup.

Exporting/Importing Entries

In the admin record edit display (Edit Participant), the entry data for the record’s log can be exported as a CSV file. This works pretty much the same as exporting records from Participants Database: if you have used a filter, the export will only include the entries shown after the filter is applied. Records can also be imported with a CSV file. It’s also possible to import and export data for all records on the Participant Log admin page under the tab for the log.

The Frontend Log Entry Display

In single record and editable record displays on the frontend, the log is displayed as a list of entries. It is very similar to the display in the admin, only the ways that the user can interact with the list are controlled by settings. This is so you can choose whether the log can be added to by users, entries edited, deleted, etc. When the record is displayed using the [pdb_single] shortcode, a list of entries is shown using the template style chosen in the Participant Log settings under the general tab. The entry list in this display can be sorted and filtered. Only log entry fields that have “public” visibility will be shown in this display.

Display Templates

For the frontend displays of the log entry list, 3 basic templates can be chosen. Which one you choose is going to be determined by what you need to show, and what is going to work best for your users.

The Table template will put the log entries into a fixed-width grid so all the values will line up below a header row. This can be the clearest way to show the log entries, but you can only control the width of the table by controlling how many log entry fields you’re showing. Also, it isn’t great on small screens because the width is not determined by the device’s screen width, and so horizontal scrolling is usually required to see all the information.

The Responsive template takes the approach that every log entry field is a separate element with its own width determined by the title and data display. These elements can flow into whatever configuration will fit on the screen. With this template, all the data will be visible on any device, but it can be cluttered.

The Grid template is kindof a bend between the two. It is responsive in that the width of the log display is determined by the width of the device display, but instead of each entry field having its own width, the widths of the entry fields are controlled into columns. This can result in a more organized and easier to see display of the log entry data.

For any kind of responsive display, some adjustments of the CSS that controls the layout are often needed. These additional CSS rules can be placed in the Participants Database Custom CSS setting.

The Summary Display

Each log entry list display may optionally show a “summary” which is configurable to show an important value, such as the number of entries. By choosing a different sum type, the summary can also display other values. If the sum type is a numeric field, the summary will be a sum of the entry values for that field, such as for a work log that shows the number of hours worked. If the field is not a numeric field, the summary will show the number of records that contain a value for that field or if the field has a default value, the sum will show all the fields that have a value different from the default value.

When searches are performed on the list or when a date range is selected, the sum value is immediately updated to show the correct value. This also happens when entries are added, deleted or edited.

This sum value is also saved in the main database so that in Participants Database list displays, the list can be sorted by the summary value: for example you could rank volunteers according to the number of hours logged, or place the collector’s club member with the largest collection at the top.

Showing an Interactive Log Entry List

When the editable record is displayed using the [pdb_record] shortcode, the log entry display is sortable and filterable, but it is also possible to enable adding new entries, editing and deleting entries, and also import and/or export entries using a CSV file. The settings that control access to these features are in the Participant Log settings, under the General Settings tab. The user interactions in this display are very similar to what is possible in the admin. Log entry fields that have a visibility setting of “public” or “private” will be seen in this display.

Frontend Imports and Exports

The interactive log list display can also be configured to allow the user to import and/or export data to a record’s log. This is enabled under the global settings for the [pdb_record] log display.

Global Log Displays

It’s possible to display a list of log entries that are taken from all the log entries in all records. There is a special shortcode [pdb_log_list] that will show all the entries in the same way that the Participants Database list shortcode shows a list of Participants Database records. You can use shortcode filters, custom templates, search, sort, etc. to customize the display.

An example of the use of this shortcode would be a car club, where each member keeps a list of the cars in their collection. The global log display could be used to show all the cars in the club.

If you’ve got more than one Participant Log defined, you can tell the shortcode which one to use with the log_name attribute. Just give that attribute the name of your log, and it will show entries from that log.

Product Settings

General Settings

These settings will affect all logs, but it is possible to override them for a specific log in the participant log field definition attributes setting.

Enable Log Search: when checked, a search input will be shown above the display of log entries. This search input will search on visible fields only.

Enable Log Sorting: when checked, fields that are configured as “sortable” will show as sorting links in the header of the log entry list.

Enable Date Created Sorting: the “Date Created” field is an automatically set timestamp for every entry. This switch allows the user to sort the entries by this timestamp field.

Entries Per Page: sets the default number of entries to show in the list. If there are more entries in the log than this number, a pagination control will be shown.

Record Shortcode Settings

These are settings that pertain to showing the log list when using the [pdb_record] shortcode. The log list in this context is editable.

Record Shortcode Log Template: select the display template to use when showing the log entry list.

Enable Creating New Entries: when checked, allow the user to add entries.

Enable Editing Entries: allows the user to edit entries.

Enable Deleting Entries: allows the user to delete entries.

Allow Log Export: allows the user to export a CSV with the log entry data.

Allow Log Import: allows the user to import log entries in a CSV file.

“Slide In” Entry Controls: when checked, the log edit controls will be hidden until the user hovers over an entry. This is good for compact displays.

Highlight Color: lets you select the color to use when highlighting an entry while it is added or edited.

Single Shortcode Settings

These setting are used when showing the list of log entries when using the [pdb_single] shortcode.

Single Shortcode Log Template: selects the display template to use when showing the log entry list.

Individual Log Settings

For each log you have defined, there is a tab and under that tab are settings that are specific to that log.

Tabs for individual logs: “Work Log” and “Projects Completed”

Log Fields

In this section, the fields that are used for each entry of a log are defined. The interface is very similar to the one used on the Manage Database Fields page. There are a few differences, for example, there are no field groups (instead there is a “visibility” selector). And, like the Manage Database Fields interface, which options you can set depend on the type of field you have created. You can edit, delete and add log entry fields in this interface.

It is highly recommended that you define all the fields you need to use before adding entries to the log.

An example of a set of fields defined for a work log.
Configuring a log entry field

Log Options

For each log, a set of options is available:

Log Entry Name: name for a single entry.

Log Entry Name Plural: name for several entries.

No Entries Message: message to show when a log has no entries.

Search Field Placeholder: when the search input is shown, this placeholder string will serve as a prompt for the user.

Entry Image Height: the nominal image height for images uploaded to a log entry. The aspect ratio will be preserved in most cases.

Entry Dates

These settings are for configuring how entries are dated.

Primary Date Field: this allows you to select a log entry field to use as the date for the entry. It defaults to the timestamp that is set when the entry is created. You would use this in the case of something like a list of events where the date of the event is more important than the date the entry was created. This date field will be used to sort the entries chronologically.

Show Log Entry Timestamp: every entry has a timestamp, this preference lets you make that timestamp visible.

Timestamp Title: if you are showing the timestamp, this is how it will be labeled.

Date Range Filter

It is possible to filter entries by date range, these settings configure the date range interface.

Enable the Date Range Filter: check this to turn on the date range control for the log.

Date Range Filter Heading Text: title for the date range control. Leave blank for no title.

Date Range Filter Button Text: text for the button that performs the date range filtering.

Entry Sum Display

The “entry sum” is a feature of the log where a configurable sum is shown. The default is to show the number of entries, but if there is a numeric field in the log entries, the entry sum can show a sum of those values. For example, in a work log, it can show the number of hours worked.

Show Entry Sum in Record Displays: this is to enable a summary display just above the list of entries.

Sum Type: this is where you would configure what is summed.

Sum Display Template: this gives you a way to control how the sum is displayed. There are a number of “value tags” you can use to show dynamic values from the log in the summary display.


Is it possible to override the global setting in individual logs?

Yes, this happens in the log field definition on the Manage Database Fields page in the main plugin. You add your override to the “attributes” for example to override the global setting and allow adding entries on the frontend:


Here is a list of the global settings with the proper name to use in the attribute:

Setting attribute name
Enable Log Search enable_log_search
Enable Log Sorting enable_log_sorting
Entries Per Page entry_list_limit
Record Shortcode Log Template record_module_log_template
Enable Creating New Entries allow_frontend_add
Enable Editing Entries allow_frontend_edit
Enable Deleting Entries allow_frontend_delete
Allow Log Export allow_export
Allow Log Import allow_import
“Slide In” Entry Controls hide_entry_controls
Highlight Color highlight_color
Single Shortcode Log Template single_module_log_template

Support Discussions for Participant Log

  • Hello Roland,
    very nice this log plugin ( but which requires some CSS ;-)

    Concerning the buttons for adding new entries, I did not find a way to change their text . It alway puts “Add New” before the string I am able to put in the plugin’s general settings.
    Now I found that this “Add New” is hard coded in the record.php and entry-input.php. Is there an elegant way to change the text of the buttons, without touching your code ?

    Thank you

    • It looks like it’s hard coded, but if one is defined, it comes from the translation file. What you need to do is create or edit the translation file for the language you’re using.

      To create a translation file, you would need an application such as Poedit that can load the translation template (located in the /languages folder of the plugin) and generate a file in your language.

  • Sorry, that doesn’t seem to work. The id isn’t making it onto the end of the url.

    • Make sure you have the “Participant Record Page” configured. This is in the main plugin settings under the Record Form tab.

      • I’m using the “Participant Record Page” for another part of the database.
        I have already created another template which allows me to open an edit link in another page with a record shortcode, by coding in the url and getting the private id from the record, but this did not work with the log template.


        if ($this->field->name == ‘edit_link’) {
        $this->field->link = ‘/debtor-entries/?pid=’ . $private_id;

        I can see from the debugging log that there is a join between the main database and the log which is presumably why I can’t get the private id in the same way on the log template. (I can display it in the list).
        The template you gave me is not returning anything to the end of the link.
        Ideally I’d like to be use the sam method as above, I just need to get the private id.

        • Take a look at this gist to see how this can be done:

        • Apologies for the very long delay, I haven’t had a chance to look a this for some time.
          That’s the template you’ve already given me but it says there’s an error on line 17.

          $record_id = $wpdb->get_var( ‘SELECT


          FROM ‘ . \pdblog\Plugin::log_table_name( $log_list->shortcode_atts[‘log_name’] ) . ‘ WHERE


          = “‘ . $entry_id . ‘” LIMIT 1’ );


        • Yes, you can get values from the record using the $participant_values array…so $participant_values['private_id']

  • I’d like to change a fieId type from text-line to text-area in a log. When I go to do this it says I may lose the data already entered. Do you know if this will happen when changing from text-line to text-area?

    • Hi Laura,

      This is explained in the help link for the warning message, but the quick answer is no. Data loss can happen if the data format of the new field is incompatible with the current field’s saved data…for example changing a text field to a numeric field.

      Since you’re talking about going from one kind of text field to another, there won’t be any data loss.

  • Hello Roland!

    Thank you for this awesome plugin.

    I’m trying to create a “list of all projects” by users. The list is created with [pdb_log_list]. The idea is that if someone is interested in a project they can click on a link in the list and get to the detail page (pdb_single).

    On pdb_list this is easy to do with the placeholder field, but how do I do this on pdb_log_list?

    Also, images are not displayed on pdb_log_list. They are only visible on the edit page. What could be the issue?

    Thank you for your help!

    • This requires a special template, I have provided an example of how to do that here:

      Be sure to read Using Participants Database Custom Templates if you don’t know how to set up a custom template.

      I don’t see the problem with images in the log list, it may be an issue with CSS on your site. Check the source to first find out if the image tag is there, and then if it is, check the CSS rules that are applied to it to find out what the problem is. You can fix this with your own CSS rules that override the rules that are keeping it from being seen.

      If the image is not present in the HTML, there may be an issue with the configuration.

      • Hello Roland!

        This is amazing. Thank you so much for the excellent support. I was able to install this and it works :)

        All the best

  • Global log display. In the text above it says there is a shortcode for displaying entries from all the logs, but I can’t find the shortcode anywhere.

    • I’m sorry about that, a display issue prevented the shortcode from showing up. I fixed that.

      The shortcode is [pdb_log_list]

  • How would I create an entry in the Partcipant’s log of a profile upon sending an email through the Participants Database Email Template initially as a List Participants Update but based on a cron job so I can send reminders.

    I send reminder to 20 people I want to update each profile’s participant log with the notification of it sent.

    • I have an article on how to set up emails on a cron job. It will require some coding skills to get it to do what you want.

      Automatically Sending an Email using the WordPress Cron

      • Hi Rolan. I saw the article on the Cron jobs, that is a feature that made me buy the email expansion. Can the Cron job be made to update the participants log when it sends an email…or in a step by step break down?

        Step 1. – Create list to be sent too
        Step 2 – Send email template to list
        Step 3 – Update individual participants log with the date, time and email template sent.

        Assuming it can can you point me in the way to do it or tell me what it would cost to have you add the functionality?

        • In you cron handler function, you can update the Participants Database record using this method:

          Participants_Db::write_participant( $data, $record_id );

          Where $data is an associative array of the data you want to write to the record.

          I’m sorry, I don’t offer custom coding services.

  • May be linked to an issue already reported, but both front-end import and export popups are visible even when not ticked in global settings. The buttons do not appear, but the popups do (overlaid on other items).

    Also, neither the Add or Edit Entry buttons seem to work, I just get the spinning logo. Do I need to define a page for them to use?

    • First log set up fine, but 2nd one didn’t. Fields are empty and it won’t delete them, but says field names are in use.

      • Fields are “empty” I don’t understand, what are you seeing? Also, what exactly happens when you try to delete a field?

    • This sounds like an issue with the javascript. Are you using the latest version of the plugin? Should be 1.4.4

      You don’t need to define pages for adding/editing entries, that is all done on the same page.

      • Yes, 1.4.4, only downloaded yesterday.

        When I added a field to the log, it created an entry for it like any other field, but the Title, name etc are all blank. I created 3 fields before realising, and they are all blank. When I try to delete it I get ‘error: could not delete field’.

        I can send screenshots if that would help.

        • I don’t know how that would happen. I suggest you delete the second log from the Manage Database Fields page and try it again.

        • That’s sorted the log creation, although had to use a different field name as the all the empty fields came back when I used the same one. That’s ok though.

        • You can give it any title you want, the name is for internal use. What was the name you originally used?

          If you want to send a link to the page where you are seeing the issue with the overlays, send it to I’ll take a look…I can’t tell much without actually seeing it, since it is a javascript issue.

  • Frontend import window remains open

    I’m using Participants Database Participant Log version 1.4.2. I selected the options to allow frontend import and export. All was working well. (I then installed and set up the Field Group Tab add-on.) All was working well at first (few times of testing the frontend), but now the import csv window appears and remains open. Switching through tabs, refreshing page, using a different browser, attempting to use the import…does not clear the window. The cancel on the import window does nothing either; the window remains. The window only disappears when I deselect the frontend import and export options. Please assist.

    • When I add

      allow_import::true, allow_export::true

      in Manage Database Fields to the two log fields I’m concerned about, the import and export buttons appear on the frontend but clicking on them (1) makes the buttons disappear for 1 log or (2) simply does nothing for the other log.

    • Thanks for letting me know about the problem.

      Until I can issue a fix, you can work around this by using the global settings to enable CSV imports and exports. If you want to prevent that on a specific log, you can use allow_import::false, allow_export::false in the attributes setting of that field.

      • I started with the Participants Database Participant Log general settings set to enable CSV imports and exports. That’s when the import window opened and stayed open. I disabled that and then went to do the local log settings using attributes. Same issue. I see no option under the global settings for frontend importing and exporting.

        • Yes, the “general settings” is the global setting I’m talking about.

          Try it using the global setting (as you did at first) and remove the setting from the log field attributes. Try the export. If you’re running into a problem with the window not closing, it’s probably due to a conflict with another script on the page. To check that, open your developer tools, reload the page, and look at the “console” to see what errors come in when you use the import/export buttons. If you want to send me a link to the page, you can send it to

          I see the bug when the global setting is off and you’re enabling the import/export in the field attributes, I’m working on a fix for that.

  • Log entries not showing in Frontend.
    In the admin view I can see 2 log entries on the record. However, when the member opens that record, they see the following error message:

    A new record must be saved before adding log entries.

    I have verified all fields are set to PUBLIC

    • I have verified this is due to problems setting the login cookie in the Participants Login plugin.
      If the Use Cookie option is selected under the Participant Login plugin, the log entries do not show on the frontend, only in Admin. I have verified by turning it on and off, and noting the change in behaviour. It is consistent and not based on browser.
      Unfortunately, without the Use Cookie option, my members get logged out of the system too soon, without notification. As a result when they try to submit, they get a TYPE MISMATCH error. So the Use Cookie option is essential for me.

      • I’ve tested this here and I’m not seeing the problem with the cookie functionality interfering with the visibility of the participant log. There seems to be something not quite working with the cookie in your case. One of the things that can cause this is your web host’s restrictions on the use of cookies: for example, they may require that the name of the cookie conform to a specific format. There might be something in the error log that would help specifically identify the issue.

        • It’s my own server, so there are no settings for permitted cookie formats etc. I have tested this on phones as well as PC’s. It is clear the use of the cookie is preventing something from being returned to the server which is then used to pull the participant log – the fact that it says the record must be saved first suggests it is concealing the PID from the server. I note, for example, the URL you arrive at via the login plugin does not include any identifying information. It looks like the login cookie is blocking or replacing it. I presume from this functionality that the member is identified and relevant data is sent to the browser, and the log records are then called from within the browser, not generated as part of the initial data stream from the server at initial login?
          I have also trawled access and error logs, but see nothing to indicate problems here.
          However, this is all the result of the login holding a very short time cookie. If people were not disconnected from the system within a few min, they wouldn’t get the TYPE MISMATCH error when they try to submit. It can easily require 30-60 min to complete this form if people have to go look up information or scan documents during the process. If you can tell me where the code lies which sets the initial cookie at login, I can see about increasing the cookie duration to a couple of hours, avoiding this problem?

        • It’s going to be hard to offer a solution here when it’s not clear to me why it’s failing. The extended access cookie should be good for 24 hours.

          In the absence of some kind of error, there is no reason to think that a cookie would prevent the browser successfully posting to the server. That kind of failure is something you might see on a server with very tight security, in which case, you’d need to add a specific exemption ot the firewall rules to allow that specific transaction. The 404 is a possible indication that a firewall rule is in play here, that is a common server response for a blocked request.

          The cookie is set when the user successfully submits the login form. You will be able to see the cookie in the browser to verify that it is set. The cookie stores the PID for the record, so it is not needed in the URL for the record edit page.

          What is the exact wording of the type mismatch message? You say the 404 happens when the “login link is activated” I’m not sure exactly what you mean, what user action leads to the 404?

Leave a Reply to Brandt Dainow Cancel reply

You have to agree to the comment policy.

Would you like to be notified of followup comments via e-mail? You can also subscribe without commenting.