Frontend List Record Edit Link
Let’s say you want some users who do not have access to the admin section to be able to edit records. You want to show them a list of records that includes a link to a record edit page.
Set Up the Participant Record Page
First make sure your record edit page (known as the Participant Record Page) is properly set up. This is a page which has the [pdb_record] shortcode in it and will therefore show the user’s editable record when properly accessed. Make sure it’s configured in the plugin settings under the Record Form tab: the “Participant Record Page” setting needs to point to your record edit page.
Setting up the Link
You’ll be showing a list of records with a link to edit a record in each listing, so you’ll need to decide what field the link should go on. For this tutorial, we create a new “placeholder” field (on the Manage Database Fields page) and name it “Edit Link” and give it a default value of “Edit.” (The default value can actually be any text you want shown as the clickable text) This column won’t do anything other than provide clickable text. Go to the Manage List Columns Page to add your edit link to the list display.
It’s important that the field you choose for your edit link is not the same field as you have defined as the “Single Record Link Field” in the settings.
The Custom Template
In this article, I am providing an example template that you can use. It is very important that you place that template file in the correct location on your website. Please read Using Participants Database Custom Templates for the details.
The custom template example I provide is named pdb-list-edit-link.php
To use the template, add the name of the template to the list shortcode like this: [pdb_list template=edit-link]
How the Code Works
Here is the main loop that generates the list as seen in “pdb-list-default.php”:
<tbody> <?php while ( $this->have_records() ) : $this->the_record(); // each record is one row ?> <tr> <?php while( $this->have_fields() ) : $this->the_field(); // each field is one cell ?> <td class="<?php echo $this->field->name ?>-field"> <?php $this->field->print_value() ?> </td> <?php endwhile; // each field ?> </tr> <?php endwhile; // each record ?> </tbody>
We need to alter the value of a field before it’s displayed, so that goes inside the second loop, before anything is printed. The plugin has a convenient way to do that: a template helper class with methods that give us easy ways to work with the field values. We set that up by instantiating the Template class object using the current record object ($this).
Here is the code for a template that shows an edit link for each record in the list. This replaces the code shown above.
<tbody> <?php while ( $this->have_records() ) : $this->the_record(); // each record is one row ?> <?php $record = new PDb_Template($this); ?> <tr> <?php while( $this->have_fields() ) : $this->the_field(); // each field is one cell ?> <td class="<?php echo $this->field->name ?>-field"> <?php /* * put the edit link URL into the link property of the field */ if ($this->field->name == 'edit_link') { $this->field->link = $record->get_edit_link(); } $this->field->print_value(); ?> </td> <?php endwhile; // each field ?> </tr> <?php endwhile; // each record ?> </tbody>
The way this works, is for each new record, the Template class is instantiated with that record’s data. Then we start looping through the fields in that record. When the “edit_link” field is getting shown, we make the field clickable by putting the edit link URL into the field’s “link” property. The $record->get_edit_link() method is provided by the template object, and makes getting the correct URL of your record edit page easy.
You can use this technique to add a link to any text or image field in the list. To make a field value clickable, set the “link” property of the field ($this->field) to the URL you want the click to go to. If the field already has a link on it, the new link will replace it.
The get_edit_link() property uses the global setting “Participant Record Page” to determine which page the editable record is shown on. You can also set that in the function itself if for some reason you wanted it to be different for this particular template: $record->get_edit_link('record-edit') if you want to send them to a page with the slug “record-edit.”
The Complete Template
Here is the whole template for you to use if you don’t want to create your own. The link to download it is at the bottom of the code window.
Hi Roland,
I have created a log list using a custom template based on pdb-log_list-default and placed the get edit link code into the relevant section. Although it is creating a link, it is not pulling the UPID number into the link so returns a page with no record found.
Is it possible to pull an edit link through the log list?
I’ve turned debugging on and receiving the following error…
Warning: array_key_exists() expects parameter 2 to be array, null given in /home3/xqxiavmy/public_html/FIPFAclassification/wp-content/plugins/participants-database/classes/PDb_Template.php on line 608
Hi Alex,
The PDb_Template class can’t be used in a Global Log List template currently, I have it on my to do list, but it’s not implemented yet.
I have posted an example template that shows how to set the record edit link in a Global Log List with the current version of the Participant Log plugin.
https://gist.github.com/xnau/9579c48af664cccbf150a92d40655b18
Thank you Roland,
I’m getting some weird results with the code. From what I can work out it is using the number of log record id to reference the participant private id in participant table. E.g if the log record_id is 6 but is attached to participant id 2, the log_edit_link links to participant id 6 not 2.
I’m guessing it’s just a case of changing a reference in the function, but I’m still learning so not sure what or where.
A bit of reading and I think I’ve fixed it.
Line 17 should be
$record_id = $wpdb->get_var( 'SELECT `record_id` FROM ' . \pdblog\Plugin::log_table_name( $log_list->shortcode_atts['log_name'] ) . ' WHERE `record_id` = "' . $entry_id . '" LIMIT 1' );
Many thanks again
The code is correct, the “record_id” column of the log entry is the id of the Participants Database record the log entry is attached to. We are using that value to build the record edit URL.
Good day sir,
How would one go about using this within – pdb-single-default.php for a single link? Or am I missing a simpler way within settings to edit a single record.
Also, after editing a record and saving, is there a way to have it go back to the [pdb_single]?
Thank-you,
Daz
To add an edit link to the single record display, you need to use a custom template. The way to get and apply the link is very similar to the way you do that for a list template. You could also add the link as a separate item (rather than apply it to a PDB field as it is done in the list template).
To set up a return to the single record after the user edits the record, you will need to use a custom template for the pdb_record shortcode also. You can use the PDb_Template class to get the link back to the single record page, then set the “submission_page” property to that link…you can do that with something like this in the header of the record shortcode custom template:
$record = new PDb_Template( $this );
$this->submission_page = $record->get_detail_link();
Thanks for the reply Roland,
I’m close, I think my problem is where I would place the code on my template. I’m using single_default as the starting point but it wants to repeat the value of the last field.
Daz
How about changing the redirect page if adding a participant from within admin?
Is it possible to have it redirect to the pdb_single page with the data submitted for the new participant?
You can use the “action” attribute of the [pdb_record] shortcode to send the user to another page after submitting an update.
This is not possible.
Thank-you, I can stop trying and start looking for a work around.
Appreciate your help, you rock!
Hi Roland:
How to close the editable-[pdb_record] once the save button is clicked ?
Just like when the submit button is clicked from the sign-up form..
Thanks
rdgs
javz
You can use the “action” attribute to send them to a different page when they submit the form. Put the [pdb_update_thanks] shortcode on that page to shopw the feedback message.
[pdb_record action="update-thanks"]
Hi Roland:
I created a page (Success) w/ shortcode = [pdb_update_thanks] and
then on the (Record Page), I used the shortcode = [pdb_record action="update-thanks"], but when I clicked the Save Button, it displayed the message “Your information has been updated” (w/c is the default record updated message from the record form settings) and the editable page is still on display… the action=”update-thanks” failed. I also tried to use with [pdb_user_record action=”update-thanks”, but same result, perhaps I missed to set something???
Help pls. Thanks
The value of the “action” attribute must be the name of the page with the [pdb_update_thanks] sortcode.
The [pdb_user_record] shortcode does not support the use of the “action” attribute unless you edit the tutorial plugin to use it.
Hi Roland:
Still on the issue of “action”
I used [pdb_record action="url slug"] , it worked, its been directed to that page, BUT, unfortunately, if I checked the DELETE checkbox in that editable-page and click the save button, the message “Record has been deleted” was not displayed anymore, only a blank page, How can I display a delete message???
And this action=”url slug” does work with [pdb_user_record] WHY ?
Thanks and need help.
rdgs;javz
It won’t show the deleted message, it’s not set up to do that, I’m sorry. You get a blank page because the record has been deleted, you will need to add some custom code to show a deleted message on that page.
Hi Roland:
You Said: ” you will need to add some custom code to show a deleted message on that page. ”
1. HOW and WHERE to add ? Perhaps pdb_record_delete_switch ?
2. Any similar sample(s) for reference or template?
Thanks and still need advice.
Rdgs; Javz
You are using custom code to delete the record. A good way to do this is to add to that code a filter that changes the “thanks” message. The filter for that is pdb-update_thanks_message so you could use something like this:
<?php add_filter( ‘pdb-update_thanks_message’, function( $message ) {
$message = "Your record was deleted.";
return $message;
} ); ?>
For your reference, you can find the filter in the plugin code at around line 390 of classes/PDb_Signup.php
Hi Roland:
You mean to say that I will Insert this code:
in pdb-record-delete-switch.php ?
If YES, which line no. ? Perhaps below line 73 ? where I found the message code :
if ( $success ) {
Participants_Db::$plugin_options[‘no_record_error_message’] = __( ‘The record has been deleted.’ );
Is my understanding correct?
Thanks, need more advice.
Rdgs;
javz
That code should replace the code that sets the “no record error mssage” since you’re providing a different way to show the same message.
Hi Roland:
I tried to follow your instruction, and came up with this:
Participants_Db::$plugin_options [add_filter( āpdb-update_thanks_messageā, function( $message ) {
$message = “Your record was deleted.”;
return $message;
} )];
I did not get any errors with wp, but still it does not display any message when a record has been deleted.
Is my coding Correct?
Thanks, and need further advice.
Rdgs;
javz
Take a look at the record delete plugin, I updated it with the filter for the thanks page message.
https://gist.github.com/xnau/40ff2abd35fb856e3d06dbb4bdbc7169
Hi Roland:
I tried the your new code: pdb-record-delete-switch.php
1. Installed/activate the plugin and tested it with the existing:
update-thanks (page) w/ shortcode = [pdb_update_thanks]
GIPs Record (page) w/ shortcode = [pdb_record action="update-thanks"]
With update: It displays the message ” [pdb_update_thanks] ”
With delete: It displays the message ” [pdb_update_thanks] ”
I checked your new code and notice : add_filter( ‘pdb-update_thanks_message’, function( $message )
So I changed the page into:
update-thanks-message (page) w/ shortcode = [pdb_update_thanks_message]
GIPs Record (page) w/ shortcode = “[pdb_record action="update-thanks-message"]
But still result….
So I removed the shortcode from the update_thanks_message (Page)
It displayed a blank page both on the update and delete pages.
Did I miss to set something?
Thanks and need more advice..
Rdgs;
javz
Hi Roland:
I tried the your new code: pdb-record-delete-switch.php
Installed/activate the plugin and tested it with the existing:
update-thanks (page) w/ shortcode = [pdb_update_thanks]
GIP Record (page) w/ shortcode = [pdb_record action="update-thanks"]
But it displayed the short code instead of the message in both the update and delete pages.
Did I miss something?
Thank you and need more advice.
Rdgs;
javz
If it shows the shortcode you have one of two issues: either the plugin is not activated or there is a syntax issue with the shortcode string itself. Use a shortcode block and make sure the syntax is correct.
Hi Roland:
I checked the plugin, its working and activated.
I check the short code block and syntax, its correct.
But, still same result, “Blank Message” both for update and delete.
Remedy:
I just created a page with a message “Success”
Downside:
Both update and delete have same message output
question: ACTION = “url slug”
is this possible : action = “pbd_update-thanks”
Is the action syntax correct
Sorry I guess I really missing something.
Thanks and need more support
Make sure you shortcode attributes do not have spaces:
Won’t work:
action = "pbd_update-thanks"
Works:
action="pbd_update-thanks"
Also, watch out for curly quotes, the quotes must be straight quotes.
To have a different message for update and delete, you need a custom template that is designed to tell the difference between the two operations…or use a different “thanks” page for each one. In both cases, you need to have some coding skills, I can’t do that for you.
Hi Roland:
The action syntax is correct.
All the while I thought the new delete plugin that you recently modified will take care of the delete message when ever it encountered the “update-thanks” or “pdb_update-thanks” or whatever you call it ???
Why doesn’t the editable record when saved or submitted behave the same way when a new record has been added. When you add a record and submit it, will ONLY display a message “Record has been ……..” unlike with the editable record when it has been saved, it displays the message including the edited record ?
I thought when “action=update-thanks” was used it will go to a page and display the update message since w/o it, it includes the message and the edited record but if it was a delete record, the plugin delete will take over and display the delete-message, that’s what I understood when you modified the delete-record plugin ???
Is there no way for the edit-record to display the update message w/o the edited-record and w/o using the “action=” to go to another page ? since the delete-record message works fine w/o the “action=”
Can’t you modify or upgrade the edit-record code, so that it does not display the edited record together with the update-message, OR if it displays the edited-record with the update-message, the edited-record is not EDITABLE ???
I hope you consideration and approval, pls.
Thank you very much.
Rdgs;
javz
I’ve done some testing and I’m sorry to say that the delete plugin can’t show the deletion message if you are using a separate “thanks” page. This is because there is a page refresh and the “thanks” message won’t show if the record can’t be found (the record no longer exists at this point). I never designed the thanks page to work for this situation…I did not realize this until you brought this problem to my attention.
So, it will be fixed, but not right away, I am working on an update to the main plugin and it will be probably a week before it is ready to release.
I will also release an update to the pdb-record-delete-switch.php plugin at that time as well.
Thanks Roland:
I’ll wait for the new plugin and pls. do announce its release.
Hi Roland:
Any news regarding this:
You wrote:
Sincerely:
javz
Yes, you should update to the latest version. There’s an updated version of the record ddelte switch template also.
Dear Roland:
You Said: ” Yes, you should update to the latest version. Thereās an updated version of the record delete switch template also. ”
May I know the new file name and where to download ?
Thank you and regards:
javz
I finally get it to work but now it shows also “Export CSV..” and file name for exporting all database below all records where link “edit-link” is visible and clickable (using [pdb_list template=edit-link] shrotcode). If I don’t use template (located in ../plugins/participant-database/templates/pdb-list-edit-link.php), I got listed records well, but of course without link at placeholder.
I am not so proficient in php and stuff and I think I made some error in following your steps.
First of all, make sure you’re putting your template in the correct location,. Do not put your modified templates into the plugin folder, they will be deleted when you update the plugin. The correct place to put the custom template is explained here…
If you have “Export CSV” showing under the list, you’re probably using the wrong template. The template in this article won’t do that, so you must have gotten your template code from another article….you should use the template code from this article if you want to show a link to the editable record.
Thanks for quick reply. In process of preparing I was doing “Edit record” page, which was translated to local language and therefore slug also changed differently. After I setup all details it still didn’t worked.
But when I changed also this:
if ($this->field->name() === ‘edit_link’)
into
if ($this->field->name() === ‘change-record’)
it worked prefectly!
Thanks for great plugin!
(I have another question regarding combo search plugin which I will post on different post.)
thanks you too
Hello!
I did add template and use [pdb_list template=edit-link]. It work well and link point to correct [pdb_record]. Later I install [pdb_user_list] plugin and edit link is not work any more.
List page
[pdb_user_list template=edit_link]
the lis show correct date from user owner but edit link field does not have hyperlink.
Record Page
[pdb_record]
regards,
try renaming your template so it matches the shortcode: pdb-user_list-edit_link.php
ignore my previous message…instead, don’t change the name of your template, then make sure the template name is correct, you have it as edit_link in your second shortcode, should be edit-link
Hello
I have a little problem.
I installed participant database to manage the vintage car sheets for a club.
Each member of the club can have one car or several cars.
Don I installed the plugin allowing to connect the base to the users.
shortcode [pdb_user_list] it works well, a user can have multiple cars.
On the other hand, when I want to apply a template to create a link of modification to each recording of the list created by [pdb_user_list], I click on the link but it is the same car file which opens for all the recording.
Can you help me?
Thank you
Luke
FYI I apply for all records the shortcode [pdb_list template = edit-link] with the template pdb-list-edit-link.php it works very well
I don’t know what the problem is, hard to tell without seeing it.
In the pdb-wp-user-shortcode.php script on line 47, you should have:
return do_shortcode( '[pdb_list filter="' . $this->user_id_field . '=' . $this->user_id() . '" template=edit-link ]' );
Hello
A big thank-you
In the definition of the shortcode “pdb-wp-user-shortcodes.php” I was missing “template = edit-link” Here I added it and it works perfectly
Thank you
Take care of yourself in this pandemic period
Luke
Hi,
I have implemented this and get a list with a clickable link. Clicking on the link opens page example
https://www.ispotproperty.com.au/prospects-edit/?pid=I8ZMI
Clicking save saves the record but instead of showing a message returns as 404 page not found error.
Any help on what I have done wrong here??
It looks like you’re doing everything right. The most likely explanation is that there is a server security rule that is getting triggered by the submission. Ask your web host to look into it, as this is something that is set up at the server configuration level.
Hi When I create new āplaceholderā field the option to make read only etc does not appear & when I run [pdb_list template=edit-link] the edit link filed shows just text not clickable.
No need to set the placeholder read-only, they are always read-only. That instruction is from before I changed the UI.
If the field is not clickable, you need to edit the template so that it targets the correct field. On line 42, it looks for the name of the field to put the link on…this must match the field name you are using to show the link.
Also, of course, you need to have your Participant Record Page set up.
Hi Roland,
I have the same problem mentioned above. The edit link isn’t clickable. I add pdb-list-edit-link.php file in my theme folder into a folder named templates and that didn’t work but when I added the files into the folder of the plugin folder worked perfectly. Now I am worried if I update the plugin that file might get wiped out. Can you advise what I need to do please?
Thanks
The best way to set up custom templates is to use the free Custom Template Folder add-on and then place the templates in this location:
/wp-content/participants-database-templates/
Hi Roland.
I used your code from above.
The list page does give me a edit tab that goes to a pid.
However, when you click on the edit button, it just clears the page I am on.
Any thoughts why.
http://r89.134.myftpupload.com/edit-record-link/
Drop Down go for Section and enter either “M o J”
Thank you
Works for me… did you fix it?
Seems to work for me now.
Thanks for getting back to me.
Any reason why the burial last name is highlighted in blue? If you click on it, it clears the page. Any way to remove color
Select burial last name and use “anderose”
The reason the last name is a link is in the plugin setting under the list display tab, check the “Single Record Link Field” also “Single Record Page” settings.
I suggest you scan through the settings and make sure everything is the way you want it.
The blue is due to your theme CSS applied to all links. If you want to change it, you need to add your own CSS rules that override it.
Hey Roland. I am very confused with this. I have added a new Field Group called Edit Link. The field title is edit link. Form element is Placeholder. Default Value is Edit. The link shows up but does nothing. My page is Edit DB Record with the shortcode [pdb_list template=edit-link]. I copied your template and added it to the templates folder. I added the field to my Manage Lists Columns.
I can give you access if you would like.
James
Check the plugin settings under the “Record Form” tab, make sure the “Participant Record Page” setting points to your page with the [pdb_record] shortcode.
Roland – that didn’t work either. When I click the Edit link it reads “No Record Was Found”.
Can I email you username and password to look at the settings?
Make sure that the shortcode you have on that page is the [pdb_record] shortcode.
Nothing I seem to do will show records to edit. Looking at what @markdtg has accomplished, I am quite jealous.
I’m just wondering if I can get help making sure the structure is set up correctly. Thanks!
James
Send me a link to the list display and I’ll take a look. I’m not usually willing to log in to user’s sites.
Hello fellow colleagues,
I can’t do that with editing.
I want the logged in user to be able to edit the data, but how? The howto is very confusing, is there no photo spread?
Best wishes
Take a look at this page:
Using Participants Database with WordPress Users
It explains how to link Participants Database to WordPress users.