Downloads: Getting DokuWiki to use Wordpress Authentication (v1.2)
This extension does not transform your Wordpress (WP) posts into DokuWiki (DW) entires. If your looking for that functionality, I’d recommend doing a google search for dwBliki plugin.
What this extension does is to get DokuWiki to use Wordpress’ authentication, i.e. DokuWiki to use Wordpress’ user database, using an authentication plugin for DokuWiki.
Download the DokuWiki Authentication Extension (v1.2)
Previous downloads:Download the DokuWiki Authentication Extension (v1.1) and Download the DokuWiki Authentication Extension
Before you begin, you’ll need to be able to run MySQL commands on your WP database and shouldn’t be afraid of modifying some code.
Much of this work was based on the DW splitbrain.org wiki documentation. I used the phpbb integration as a template. See:
http://wiki.splitbrain.org/wiki:auth:mysql
http://wiki.splitbrain.org/wiki:tips:integrate_with_phpbb
I’ve tested this with versions:
DokuWiki: 2006-03-09d
Wordpress: 2.0.4
I can’t speak for other versions.
Version History
1.2 (10/10/2006)
- The extension turns back on “magic quotes” which causes additional slashes in DW articles after editing.
1.1 (03/10/2006)
- Small fix for using Wordpress tags while logged in.
- Documentation/Instructions updates
1.0 (27/09/2006)
- First Release
Notes on using this authentication plugin
I’d recommend that you get your users to use the WP’s Register, Login and Logout interface rather than DW’s. However, DW’s Login and Logout should work fine and they should log in and out of WP at the same time.
BUT you should use WP to add new users. If you use DW, they won’t be configured correctly to use WP as you need to modify two SQL tables and DW will only modify one.
By default all users are a member of the “defaultgroup”. WP does not have any concept of user groups. It does have a concept of roles which I have ignored because I wanted the flexibility of DW’s user groups. You can’t really remove users from this group unless you modify “wordpress.class.php”.
You can use DW’s “User Manager” to add and remove your WP users from DW’s user groups but avoid the “Configuration Settings” as this overwrites your local.php and seems to cause problems for the WP authenication.
This plugin also introduces a useful feature. Because it pulls in your Wordpress files, you can then, anywhere else in DW, access Wordpress functions. This means, for example, you can use template functions like “get_header();” or “get_sidebar();” if your skinning your DW.
First up: Installing Wordpress and/or DokuWiki
For installing WP or DW, refer to the included installation documentation.
Install WP first and make sure everything is up and running before installing DW. Make sure that DW is installed in a directory at the same level as WP or as a subdirectory of WP. This is to make sure that the cookie domains are the same.
In my test environment I had wordpress installed @ ~/public_html/test/wp and DW installed @ ~/public_html/test/dw.
Now, configuring DokuWiki…
First, copy “wordpress.class.php” to
I have it configured by default to assume that dokuwiki is installed at the same level as WP and that WP is installed in a directory called “wp”.
acl.auth.php
You probably created a “conf/acl.auth.php” when you installed DW initially. If you didn’t, make a copy of conf/acl.auth.php.dist and name it “acl.auth.php”.
local.php
You probably created a “conf/local.php” when you installed DW initially. If you didn’t, make a copy of conf/local.php.dist and name it “local.php”. Open it in your favorite text editor and add (or modify) these settings:
Finally, modifying your SQL Database
First, backup your database. You can do this quite easily via WP’s Database plugin.
You need to create two new tables to support DW. In the code below I’ve called these tables “wp_dw_groups” and “wp_dw_usergroups”. If you did not use “wp_” as your database prefix for Wordpress, you will need to modify these commands before you use them and replace “wp_” with the prefix you used. “wordpress.class.php” uses the database prefix to reference these tables.
Connect to your database and run these two commands:
These will create the two tables you need. However, you need to setup some groups too. So these two commands will create a user and an admin group.
Now you need to give yourself admin rights. Normally the first user created in WP is the admin account. This normally has the ID of 1. So now we will add admin user to admin and user groups.
Finished
Now you should be able to login and logout using your WP’s users on DW!
Administrator
October 10th, 2006 at 9:49 am
I’ve updated the extension to version 1.2. This includes a fix for “magic quotes”. On my test sites, the extension turned back on magic quotes when it included Wordpress and so there was lots of stray slashes.
Administrator
October 3rd, 2006 at 10:15 am
I’ve updated the extension to version 1.1 including the fix for using Wordpress template tags. With 1.1 you shouldn’t need to modify __close in mysql.class.php to access template tags when logged in.
Administrator
October 3rd, 2006 at 8:45 am
Hi Boris,
Just to confirm what you did: you removed/commented out the __close function in mysql.class.php and then removed the call to use it “getUserData”. Sounds like my original diagnoise was correct.
I’ll try and do a few tests and update my wordpress.class.php, in a similar way, so you don’t have to modify mysql.class.php. I believe, all you need to do, is have the __close function in wordpress.class.php but that it is empty (i.e. does nothing).
Thanks for your testing and help!
Mark
Guest
October 3rd, 2006 at 8:36 am
hi mark,
thanks a lot. found the function ‘function _closeDB()’ in mysql.class.php. first i tried to add the 2 lines, but i got the same error like before, plus loads more.
then i uncommented it (lines 738-745) and got another error to do with line 162, which calls the close database function, so i uncommented that as well and it works great now.
thanks again,
boris
Administrator
October 3rd, 2006 at 7:56 am
Hi Boris,
Right now, I don’t know. I’ll have to do some tests and see if I can reproduce it. So all your doing is printing titles of posts from a particular category? I should be able to reproduce that.
The error you describe indicates that the variable “all_cat_ids” in the statement:
foreach ( $all_cat_ids as $cat_id ) {
is not an array or is empty and so can’t be used in a foreach. I’m guessing the database call to pick up the category ids failed. This could be because DokuWiki shuts down the connection to the database after it’s authenticated the user.
It’ll be a little while before I look into this, but if you get the chance, if you can add these lines:
global $wpdb;
$wpdb = new wpdb(DB_USER, DB_PASSWORD, DB_NAME, DB_HOST);
to your “wordpress.class.php” at the end of the function “function _closeDB()”. (It may be there, but commented out, you can just remove the “/*” and “*/” to un-comment it).
Alternativily, comment out everything in the function so that DokuWiki never tries to close the database connection.
Mark
Guest
October 2nd, 2006 at 4:58 pm
hey mark,
found a bug i think. all the wp-functions work great, as long as nobody is signed in. but once i sign in, then loop functions don’t seem to work anymore. i use the loop to display post titles of a certain category in a css menu. once i’m signed in though, instead of the titles i get this note:
‘Warning: Invalid argument supplied for foreach() in /www/htdocs/w006dc1d/travelogues/wp-includes/classes.php on line 496′
line 496 being:’foreach ( $all_cat_ids as $cat_id ) {’,
but me, being a complete php-idiot, i have no idea what this is supposed to tell me.
the login function still works though. do you have any idea, why this happens, mark?
thanks
Administrator
September 28th, 2006 at 12:32 pm
It seems my DokuWiki extension inadvertently (at least it wasn’t my original intention) introduces a useful feature!
Because it pulls in your Wordpress files, you can then, anywhere else in DokuWiki, access Wordpress functions. This means, for example, you can use template functions like “get_header();” or “get_sidebar();” if your skinning your DW.
It should make integrating DokuWiki and Wordpress tightly, much easier.
Administrator
September 28th, 2006 at 7:52 am
Hi Boris,
Sorry. Seems I did a cut and paste error there when I was writing up the installation notes. I’ll update the webpage and the instructions accordingly.
Thanks for that
Mark
Guest
September 27th, 2006 at 8:51 pm
me again,
ok, found the problem. in your description for local.php you had this:
‘// Use wordpress authentication
$conf['authtype'] = ‘wordpress’;
// Not sure what authtype and passcrypt need to be set to, but these work
$conf['authtype'] = ‘plain’;
$conf['passcrypt'] = ’smd5′;’
which means ‘$conf['authtype']‘ is there twice, once as wordpress and once as plain. i deleted the plain bit and now everything works like a charm. thanks again.
Guest
September 27th, 2006 at 8:39 pm
hey,
thanks for the good work. have been looking for something like this. however, i installed everything the way you described it and for some reason it doesn’t work. i am using the correct versions as well.
i have wordpress installed in folder ‘wordpress’ and dokuwiki in folder ‘wiki’, both in my root directory.
so i changed wordpress.class.php to this:
‘if(!defined(’WP_ROOT’)) define(’WP_ROOT’, DOKU_INC.’../wordpress/’);’.
was this correct? thanks for the help, bo