OJS + WordPress for Platinum Open Access Journals
Platinum Open Access (also called Diamond Open Access) means the journal charges no fees to either readers (no subscription) or authors (no Article Processing Charge). Content is freely available under an open licence, and publication costs are covered by the institution, library consortium, or scholarly society that hosts the journal.
This guide walks you through using OJS as the editorial management and paper submission platform, combined with WordPress as the public-facing journal website β a popular architecture for Platinum OA journals that want a polished, SEO-friendly front end without the constraints of the default OJS theme.
1. Architecture Overviewβ
βββββββββββββββββββββββββββββββ
β PUBLIC READERS / AUTHORS β
ββββββββββββββ¬βββββββββββββββββ
β HTTPS
ββββββββββββββΌβββββββββββββββββ
β WordPress (journal.org) β β Public front end
β β’ Homepage, About, News β
β β’ Published article pages β
β β’ Author instructions β
β β’ WP REST API / GraphQL β
ββββββββββββββ¬βββββββββββββββββ
β OJS REST API (or RSS/OAI-PMH)
ββββββββββββββΌβββββββββββββββββ
β OJS (submit.journal.org) β β Editorial backend
β β’ Submission portal β
β β’ Peer review workflow β
β β’ Copyediting & productionβ
β β’ DOI / CrossRef β
ββββββββββββββββ βββββββββββββββ
Why this split?
| Requirement | Solution |
|---|---|
| Researchers need a familiar, fast submission portal | OJS (purpose-built editorial workflow) |
| Journal needs a branded, SEO-optimised public website | WordPress (mature CMS ecosystem) |
| No APC / No subscription | Platinum OA model β WordPress can accept donations via WooCommerce; OJS disables payments |
| Content in Google Scholar, DOAJ | OJS exposes OAI-PMH; WordPress article pages add meta tags |
| Fast article landing pages | WordPress + caching plugins (LiteSpeed Cache, WP Rocket) |
| Editorial transparency | OJS handles blind/double-blind review β editorial activity stays in OJS |
2. Server Requirementsβ
2.1 Minimum Spec (Small Journal, < 200 submissions/yr)β
| Resource | Minimum | Recommended |
|---|---|---|
| vCPU | 2 | 4 |
| RAM | 2 GB | 4 GB |
| SSD | 40 GB | 80 GB |
| OS | Ubuntu 22.04 LTS | Ubuntu 22.04 LTS |
Both OJS and WordPress can run on the same server for a small journal. For a medium-to-large journal (500+ submissions/year), consider separate VPS instances or containers.
2.2 Web Server Optionsβ
This guide covers three web server options:
| Web Server | Performance | Free? | Best For |
|---|---|---|---|
| Nginx + PHP-FPM | High | β | Manual/DevOps deployments |
| OpenLiteSpeed + PHP-FPM | Very High | β | Control panel (CyberPanel), caching |
| LiteSpeed Enterprise | Very High | Commercial | cPanel LSWS, maximum throughput |
3. Installation on Nginx + PHP-FPM (Ubuntu 22.04)β
3.1 Install the Stackβ
# Update and install Nginx, PHP 8.2, MariaDB
apt update && apt upgrade -y
apt install -y nginx mariadb-server mariadb-client \
php8.2-fpm php8.2-cli php8.2-mysql php8.2-pgsql \
php8.2-xml php8.2-mbstring php8.2-gd php8.2-zip \
php8.2-curl php8.2-intl php8.2-bcmath \
php8.2-opcache unzip curl git
3.2 PHP-FPM Configuration for OJS and WordPressβ
Create separate PHP-FPM pools so OJS and WordPress run under different system users:
/etc/php/8.2/fpm/pool.d/ojs.conf:
[ojs]
user = ojs
group = ojs
listen = /run/php/php8.2-fpm-ojs.sock
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 20
pm.start_servers = 5
pm.min_spare_servers = 3
pm.max_spare_servers = 8
php_value[upload_max_filesize] = 128M
php_value[post_max_size] = 128M
php_value[memory_limit] = 256M
php_value[max_execution_time] = 300
php_value[max_input_vars] = 3000
/etc/php/8.2/fpm/pool.d/wordpress.conf:
[wordpress]
user = wordpress
group = wordpress
listen = /run/php/php8.2-fpm-wp.sock
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 30
pm.start_servers = 5
pm.min_spare_servers = 3
pm.max_spare_servers = 10
php_value[upload_max_filesize] = 64M
php_value[memory_limit] = 128M
3.3 Nginx Vhostsβ
OJS vhost (/etc/nginx/sites-available/ojs.conf):
server {
listen 443 ssl http2;
server_name submit.journal.org;
root /var/www/ojs;
index index.php;
ssl_certificate /etc/letsencrypt/live/submit.journal.org/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/submit.journal.org/privkey.pem;
# OJS file upload limit
client_max_body_size 128M;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# Block access to the files directory
location ~* ^/files/ {
deny all;
return 403;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.2-fpm-ojs.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_read_timeout 300;
}
# Security headers
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
add_header Referrer-Policy strict-origin-when-cross-origin;
}
# HTTP β HTTPS redirect
server {
listen 80;
server_name submit.journal.org;
return 301 https://$host$request_uri;
}
WordPress vhost (/etc/nginx/sites-available/wordpress.conf):
server {
listen 443 ssl http2;
server_name journal.org www.journal.org;
root /var/www/wordpress;
index index.php;
ssl_certificate /etc/letsencrypt/live/journal.org/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/journal.org/privkey.pem;
client_max_body_size 64M;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.2-fpm-wp.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
# Block direct PHP in uploads
location ~* /uploads/.*\.php$ {
deny all;
}
# Cache static assets
location ~* \.(js|css|png|jpg|jpeg|gif|ico|woff2?)$ {
expires 1y;
add_header Cache-Control "public, immutable";
log_not_found off;
}
}
server {
listen 80;
server_name journal.org www.journal.org;
return 301 https://$host$request_uri;
}
4. Installation on OpenLiteSpeed (Free) + CyberPanelβ
OpenLiteSpeed is the free, open-source version of LiteSpeed Web Server. It is included as the default web server in CyberPanel and provides outstanding PHP performance via LSAPI (LiteSpeed SAPI), which outperforms both PHP-FPM with Nginx and Apache.
4.1 Install CyberPanelβ
# On Ubuntu 22.04 or AlmaLinux 9
wget https://cyberpanel.net/install.sh
sh install.sh
# Follow prompts: choose OpenLiteSpeed, set admin password
4.2 Create Websites in CyberPanelβ
- Log into CyberPanel at
https://your-vps-ip:8090 - Websites β Create Website:
- Domain:
submit.journal.org(for OJS) - PHP version: 8.2
- SSL: Enable Let's Encrypt
- Domain:
- Repeat for
journal.org(WordPress)
4.3 PHP Settings for OJS (CyberPanel)β
In CyberPanel β Websites β submit.journal.org β Edit PHP Configuration:
upload_max_filesize = 128M
post_max_size = 128M
memory_limit = 256M
max_execution_time = 300
max_input_vars = 3000
4.4 LiteSpeed Cache Plugin for WordPressβ
Install the LiteSpeed Cache plugin in WordPress. This plugin is specifically designed for OpenLiteSpeed and LiteSpeed Enterprise and provides:
- Full-page caching (server-side, not PHP-level)
- Object cache (Redis/Memcached)
- Image optimisation (WebP conversion, lazy load)
- CDN integration
Go to Plugins β Add New β Search "LiteSpeed Cache" and install/activate. Configure under LiteSpeed Cache β Cache β Enable Cache.
5. Installation on LiteSpeed Enterprise (Commercial)β
LiteSpeed Enterprise is the commercial version, commonly deployed via cPanel with LiteSpeed Web Server (LSWS) add-on.
5.1 Enabling LSWS on cPanelβ
If your hosting provider uses cPanel + LSWS (common on many managed WordPress hosts):
- Go to WHM β Plugins β LiteSpeed Web Server
- Enable PHP LSAPI via WHM β Software β EasyApache 4
OJS on LiteSpeed Enterprise via cPanel uses .htaccess for URL rewriting (LiteSpeed is .htaccess-compatible).
5.2 Key .htaccess Rules for OJS on LiteSpeedβ
OJS ships with an .htaccess file. LiteSpeed respects Apache .htaccess syntax. The critical rule:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# Block files directory
RewriteRule ^files/ - [F]
# Route all requests through OJS index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?$1 [QSA,L]
</IfModule>
6. Database Setupβ
Both OJS and WordPress use MySQL-compatible databases. Use MariaDB (included with most Linux distributions and CyberPanel) or MySQL 8.x.
-- OJS database
CREATE DATABASE ojs_production CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'ojsuser'@'localhost' IDENTIFIED BY 'STRONG_PASSWORD_HERE';
GRANT ALL PRIVILEGES ON ojs_production.* TO 'ojsuser'@'localhost';
-- WordPress database
CREATE DATABASE wp_journal CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'STRONG_PASSWORD_HERE';
GRANT ALL PRIVILEGES ON wp_journal.* TO 'wpuser'@'localhost';
FLUSH PRIVILEGES;
Note: OJS also supports PostgreSQL. See the Server Infrastructure article for PostgreSQL setup.
7. OJS Configuration for Platinum OAβ
7.1 Key config.inc.php Settingsβ
; === Platinum OA configuration ===
; Disable all payment features (no APC, no subscription)
; In OJS: Journal Settings β Distribution β Payments β disable
; Force HTTPS
force_ssl = On
base_url[default] = "https://submit.journal.org"
; Files directory (outside webroot)
files_dir = /var/www/ojs-files
; Database
driver = mysqli
host = localhost
username = ojsuser
password = STRONG_PASSWORD_HERE
name = ojs_production
7.2 Disabling Payments in the OJS UIβ
- Log in as Journal Manager
- Go to Settings β Distribution β Payments
- Set Payments to Disabled
- This removes all subscription and APC interfaces from the submission workflow
7.3 Author Instructions (Platinum OA Statement)β
In Settings β Distribution β About add:
This journal operates under the Platinum Open Access (Diamond OA) model. There are no submission, processing, or publication charges for authors. All published content is freely available online under a CC BY 4.0 licence.
8. WordPress as the Public Front Endβ
8.1 Connecting WordPress to OJS Contentβ
OJS exposes content through two machine-readable interfaces:
| Interface | Use in WordPress |
|---|---|
OAI-PMH (https://submit.journal.org/oai) | Harvest metadata for indexing |
REST API (https://submit.journal.org/api/v1/issues) | Fetch issue/article data for display |
| Galley download links | Link to PDFs/HTML hosted on OJS |
RSS Feed (https://submit.journal.org/gateway/plugin/WebFeedGatewayPlugin/rss2) | Syndicate new articles in WP |
8.2 Recommended WordPress Plugins for OJS Integrationβ
| Plugin | Purpose |
|---|---|
| WP RSS Aggregator (free tier) | Import OJS RSS feed to show latest articles in WP |
| WPForms / CF7 | Additional contact and author enquiry forms |
| Yoast SEO / RankMath | Add structured data, meta tags, Google Scholar |
| LiteSpeed Cache | Full-page caching (OpenLiteSpeed/LiteSpeed only) |
| WP Super Cache | Full-page caching (Nginx/Apache) |
| Cloudflare | CDN + DDoS protection for the WordPress front end |
| Schema & Structured Data | Article schema markup for Google Scholar indexing |
8.3 Article Landing Page Strategyβ
For optimal Google Scholar indexing, each article needs an HTML landing page. Options:
Option A β OJS article page (recommended):
WordPress article pages link to the OJS article page (https://submit.journal.org/article/view/{id}). OJS already generates Google Scholar meta tags. Simple and maintainable.
Option B β WordPress article pages with OJS iframe/embed:
WordPress creates an article page for each published paper using the OJS REST API to pull metadata. Add <meta name="citation_..."> tags to the WordPress <head> via Yoast SEO or a custom plugin.
Google Scholar citation meta tags for WordPress:
<meta name="citation_title" content="Article Title">
<meta name="citation_author" content="Author Name">
<meta name="citation_publication_date" content="2026/01/15">
<meta name="citation_journal_title" content="Journal Name">
<meta name="citation_volume" content="12">
<meta name="citation_issue" content="1">
<meta name="citation_firstpage" content="1">
<meta name="citation_lastpage" content="15">
<meta name="citation_doi" content="10.xxxx/xxxxxxxx">
<meta name="citation_pdf_url" content="https://submit.journal.org/article/view/123/456">
8.4 DOAJ Submission for Platinum OAβ
DOAJ (Directory of Open Access Journals) is particularly important for Diamond/Platinum OA journals. Requirements:
- Journal must be fully OA with no charges to authors or readers
- Content must be under an open licence (CC BY 4.0 preferred)
- Peer review must be documented
- Editorial board must be named
- ISSN required
OJS automatically produces the DOAJ-compatible Article Level Metadata export. In Tools β Import/Export β DOAJ Export Plugin, configure your DOAJ API key.
9. Staging Environment for OJS + WordPressβ
Always test major changes (OJS upgrades, theme changes, plugin updates) in staging before applying to production.
# Clone production databases
mysqldump -u root ojs_production | gzip > /tmp/ojs_staging_$(date +%Y%m%d).sql.gz
mysqldump -u root wp_journal | gzip > /tmp/wp_staging_$(date +%Y%m%d).sql.gz
# Create staging databases
mysql -u root -e "CREATE DATABASE ojs_staging; CREATE DATABASE wp_staging;"
mysql -u root ojs_staging < <(gunzip -c /tmp/ojs_staging_*.sql.gz)
mysql -u root wp_staging < <(gunzip -c /tmp/wp_staging_*.sql.gz)
# Update WordPress database URLs for staging domain
mysql -u root wp_staging -e "
UPDATE wp_options SET option_value='https://staging.journal.org' WHERE option_name='siteurl';
UPDATE wp_options SET option_value='https://staging.journal.org' WHERE option_name='home';
"
# Rsync OJS files
rsync -a /var/www/ojs/ /var/www/ojs-staging/
rsync -a /var/www/ojs-files/ /var/www/ojs-files-staging/
# Rsync WordPress
rsync -a /var/www/wordpress/ /var/www/wordpress-staging/
Edit /var/www/ojs-staging/config.inc.php:
base_url[default] = "https://submit-staging.journal.org"
name = ojs_staging
files_dir = /var/www/ojs-files-staging
10. Security Hardeningβ
OJS Securityβ
- Place
files_diroutside the web root - Set
config.inc.phpto 640 permissions:chmod 640 config.inc.php - Enable
force_ssl = On - Disable the OJS installer after setup:
installed = On - Use the PKP Security Guide: https://docs.pkp.sfu.ca/admin-guide/en/securing-your-system
WordPress Securityβ
- Change the default
wp_table prefix during installation - Install Wordfence or Sucuri Security for malware scanning
- Use strong admin passwords and two-factor authentication
- Keep all plugins and themes updated
- Block
wp-login.phpbrute force with Fail2ban or Cloudflare WAF
Server-Levelβ
- Configure UFW firewall: allow only ports 22, 80, 443
- Enable Fail2ban for SSH and web brute-force protection
- Use Let's Encrypt for TLS (auto-renewed via certbot)
- Keep OS packages updated:
unattended-upgrades
11. SEO and Discoverability for Platinum OA Journalsβ
| Goal | Action |
|---|---|
| Google Scholar indexing | Ensure article pages have citation_* meta tags; use OJS built-in meta tags or replicate in WP |
| DOAJ listing | Complete DOAJ application; use OJS DOAJ Export plugin |
| Crossref DOIs | Register with CrossRef; use OJS CrossRef deposit plugin |
| ORCID author IDs | Enable ORCID plugin in OJS; display ORCID on WP author pages |
| Open Archives (OAI-PMH) | OJS exposes OAI-PMH automatically; submit to BASE, OpenDOAR |
| Social sharing | Use Open Graph and Twitter Card meta tags in WordPress theme |
| Sitemap | Yoast SEO or RankMath generates XML sitemap; submit to Google Search Console |
12. Summary Checklistβ
| Task | Tool | Status |
|---|---|---|
| Install server stack (Nginx/OLS + PHP-FPM + MariaDB) | apt / CyberPanel | β |
| Install and configure OJS | OJS installer | β |
| Install and configure WordPress | WP installer | β |
| Set up SSL certificates for both domains | certbot / CyberPanel | β |
| Configure OJS for Platinum OA (no payments) | OJS Settings | β |
| Connect WordPress to OJS RSS/API | WP plugins | β |
| Set up caching (LiteSpeed Cache or WP Super Cache) | WP plugin | β |
| Configure SEO plugins and citation meta tags | Yoast/RankMath | β |
| Apply for DOAJ listing | DOAJ website | β |
| Register DOIs with CrossRef | CrossRef/OJS | β |
| Enable ORCID plugin in OJS | OJS Plugins | β |
| Set up staging environments | bash/rsync | β |
| Configure firewalls and security plugins | UFW + Wordfence | β |
Referencesβ
-
PKP Admin Guide β OJS installation and configuration.
https://docs.pkp.sfu.ca/admin-guide/en/ -
PKP OJS REST API β API reference for pulling article/issue data into WordPress.
https://docs.pkp.sfu.ca/dev/api/ojs/ -
DOAJ Application Guide β Criteria and submission process.
https://doaj.org/apply/ -
Budapest Open Access Initiative β Foundational document for open access models.
https://www.budapestopenaccessinitiative.org/ -
Google Scholar Inclusion Guidelines
https://scholar.google.com/intl/en/scholar/inclusion.html -
OpenLiteSpeed Documentation
https://openlitespeed.org/kb/ -
LiteSpeed Cache Plugin for WordPress
https://wordpress.org/plugins/litespeed-cache/ -
CyberPanel Documentation
https://cyberpanel.net/docs/ -
PKP Community Forum β WordPress Integration Discussions
https://forum.pkp.sfu.ca/