Plugin Directory

Gwolle Guestbook

Gwolle Guestbook is the WordPress guestbook you've just been looking for. Beautiful and easy.


  • Install the plugin through the admin page "Plugins".
  • Alternatively, unpack and upload the contents of the zipfile to your '/wp-content/plugins/' directory.
  • Activate the plugin through the 'Plugins' menu in WordPress.
  • Place '[gwolle_gb]' in a page. That's it.
  • You may disable comments in this post or page, because it may look confusing when there's the possibility to write a guestbook entry.

As an alternative for the shortcode, you can use the function show_gwolle_gb(); to show the guestbook in your templates. It couldn't be easier.

Updating from an old version

With version 1.0 there have been some changes:

  • Gwolle Guestbook uses the Shortcode API now. Make sure your Guestbook page uses [gwolle_gb] instead of the old one.
  • The entries that are visible to visitors have changed. Make sure to check if you have everything visible that you want and nothing more.
  • CSS has changed somewhat. If you have custom CSS, you want to check if it still applies.

If you have a feature request please use the forum on WordPress.org.


The plugin itself is released under the GNU General Public License; a copy of this licence can be found at the licence homepage or in the gwolle-gb.php file at the top.

Coming Soon

These features are planned. There is no particular timeframe or order for when it will be added. If you do have a feature request, please post it on the support forum.

  • More translations (send them in).
  • Frontend: Add option to show only one entry with $_GET entry_id (use no-follow links).
  • Frontend: Make it possible for an admin to reply to an entry (extra db field).
  • Frontend: HTML5 markup.
  • Frontend: Add filters for the Form in write.php.
  • Widget: Add option to not show admin entries.
  • Widget: Add option to select number of words.
  • SEO: Add title and desc of first entry to SEO meta in html (probably with javascript).

API, add an entry

It is not hard to add an entry in PHP code.

    $entry = new gwolle_gb_entry();

    // Set the data in the instance, returns true
    $set_data = $entry->set_data( $args );

    // Save entry, returns the id of the entry
    $save = $entry->save();

The Array $args can have the following key/values:

  • id, int with the id, leave empty for a new entry.
  • author_name, string with the name of the autor.
  • author_id, id with the WordPress user ID of the author.
  • author_email, string with the email address of the author.
  • author_origin, string with the city of origin of the author.
  • author_website, string with the website of the author.
  • author_ip, string with the ipaddress of the author.
  • author_host, string with the hostname of that ip.
  • content, string with content of the message.
  • datetime, timestamp of the entry.
  • ischecked, bool if it is checked by a moderator.
  • checkedby, int with the WordPress ID of that moderator.
  • istrash, bool if it is in trash or not.
  • isspam, bool if it is spam or not.
  • admin_reply, string with content of the admin reply message.
  • admin_reply_uid, id with the WordPress user ID of the author of the admin_reply.

Filter an entry on the frontend

On the frontend you can filter each entry. You can use a function like:

function your_custom_function( $entry_html, $entry ) {
    // $entry_html is a string
    $entry_html = $entry_html . " Hi There. ";
    return $entry_html;
add_filter( 'gwolle_gb_entry_read', 'your_custom_function', 10, 2 );

Filter all the entries on the frontend

Add text to each entry in the list of entries.

Adding text to the entries list can be done with several hooks. The next filters will add the string of text before each entry, in the content of each entry, or after each entry. Initially $string is empty.

function gw_add_content( $string, $entry ) {
    $string .= "Filter add content.";
    return $string;
add_filter( 'gwolle_gb_entry_read_add_before',    'gw_add_content', 10, 2 );
add_filter( 'gwolle_gb_entry_read_add_content',   'gw_add_content', 10, 2 );
add_filter( 'gwolle_gb_entry_read_add_after',     'gw_add_content', 10, 2 );
add_filter( 'gwolle_gb_entry_widget_add_before',  'gw_add_content', 10, 2 );
add_filter( 'gwolle_gb_entry_widget_add_content', 'gw_add_content', 10, 2 );
add_filter( 'gwolle_gb_entry_widget_add_after',   'gw_add_content', 10, 2 );

You can also filter the complete list of entries.

function your_custom_function($entries) {
    // $entries is a string
    $entries = $entries . " Hello my friend. ";
    return $entries;
add_filter( 'gwolle_gb_entries_read', 'your_custom_function');

Filter the form as a whole.

The form can be filtered as well:

function your_custom_function($form) {
    // $form is a string
    $form = $form . " Please fill this in. ";
    return $form;
add_filter( 'gwolle_gb_write', 'your_custom_function');

Add html to the form.

You can add html to the form at three different places. Initially $string is empty.

function gw_add_to_form( $string ) {
    $string .= "Filter add to form.";
    return $string;
// Use this filter to just add something
add_filter( 'gwolle_gb_write_add_before', 'gw_add_to_form' );
add_filter( 'gwolle_gb_write_add_form', 'gw_add_to_form' );
add_filter( 'gwolle_gb_write_add_after', 'gw_add_to_form' );

Filter an entry before saving

When saving an entry you can filter it like this.

function your_custom_function($entry) {
    // $entry is an array.
    // Example where every entry that gets saved gets the current time
    $entry['datetime'] = current_time( 'timestamp' );
    return $entry;
add_filter( 'gwolle_gb_entry_save', 'your_custom_function');

Format for importing through CSV-file

The importer expects a certain format of the CSV-file. If you need to import from a custom solution, your CSV needs to conform. The header needs to look like this:


The next lines are made up of the content.

Date needs to be a UNIX timestamp. For manually creating a timestamp, look at the timestamp generator.

It expects quotes around each field, so having quotes inside the content of the entry can break the import process.

With version 1.4.1 and older, the field datetime was called date.

You could make a test-entry, export that, and look to see what the importer expects from the CSV. Make sure you use UNIX line-endings. Any decent text-editor can transform a textdocument to UNIX line-endings.

Requires: 3.4 or higher
Compatible up to: 4.3
Last Updated: 2015-8-27
Active Installs: 10,000+


4.9 out of 5 stars


23 of 26 support threads in the last two months have been resolved.

Got something to say? Need help?


Not enough data

1 person says it works.
0 people say it's broken.

100,1,1 100,1,1
100,1,1 25,4,1
100,1,1 100,2,2 100,1,1 100,1,1
100,1,1 100,1,1 100,1,1 100,1,1 100,1,1 100,1,1 100,2,2 100,1,1 100,1,1 100,1,1 100,1,1 100,1,1 100,1,1 100,3,3 100,1,1
100,2,2 100,1,1 100,1,1 100,2,2 100,3,3 100,1,1 100,1,1 100,1,1 100,1,1 100,1,1 100,1,1 100,2,2 100,1,1 100,1,1
100,1,1 100,1,1
100,1,1 100,1,1 100,1,1 100,1,1 100,1,1 100,1,1 100,1,1 100,1,1 100,3,3 100,1,1 100,1,1 100,1,1 100,1,1
0,1,0 100,1,1 100,1,1 100,1,1 100,1,1