Skip to main content

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?

RequirementSolution
Researchers need a familiar, fast submission portalOJS (purpose-built editorial workflow)
Journal needs a branded, SEO-optimised public websiteWordPress (mature CMS ecosystem)
No APC / No subscriptionPlatinum OA model β€” WordPress can accept donations via WooCommerce; OJS disables payments
Content in Google Scholar, DOAJOJS exposes OAI-PMH; WordPress article pages add meta tags
Fast article landing pagesWordPress + caching plugins (LiteSpeed Cache, WP Rocket)
Editorial transparencyOJS handles blind/double-blind review β€” editorial activity stays in OJS

2. Server Requirements​

2.1 Minimum Spec (Small Journal, < 200 submissions/yr)​

ResourceMinimumRecommended
vCPU24
RAM2 GB4 GB
SSD40 GB80 GB
OSUbuntu 22.04 LTSUbuntu 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 ServerPerformanceFree?Best For
Nginx + PHP-FPMHighβœ…Manual/DevOps deployments
OpenLiteSpeed + PHP-FPMVery Highβœ…Control panel (CyberPanel), caching
LiteSpeed EnterpriseVery HighCommercialcPanel 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​

  1. Log into CyberPanel at https://your-vps-ip:8090
  2. Websites β†’ Create Website:
    • Domain: submit.journal.org (for OJS)
    • PHP version: 8.2
    • SSL: Enable Let's Encrypt
  3. 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):

  1. Go to WHM β†’ Plugins β†’ LiteSpeed Web Server
  2. 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>

Source: LiteSpeed .htaccess Compatibility


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​

  1. Log in as Journal Manager
  2. Go to Settings β†’ Distribution β†’ Payments
  3. Set Payments to Disabled
  4. 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:

InterfaceUse 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 linksLink to PDFs/HTML hosted on OJS
RSS Feed (https://submit.journal.org/gateway/plugin/WebFeedGatewayPlugin/rss2)Syndicate new articles in WP
PluginPurpose
WP RSS Aggregator (free tier)Import OJS RSS feed to show latest articles in WP
WPForms / CF7Additional contact and author enquiry forms
Yoast SEO / RankMathAdd structured data, meta tags, Google Scholar
LiteSpeed CacheFull-page caching (OpenLiteSpeed/LiteSpeed only)
WP Super CacheFull-page caching (Nginx/Apache)
CloudflareCDN + DDoS protection for the WordPress front end
Schema & Structured DataArticle 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">

Source: Google Scholar Inclusion Guidelines

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​

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.php brute 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​

GoalAction
Google Scholar indexingEnsure article pages have citation_* meta tags; use OJS built-in meta tags or replicate in WP
DOAJ listingComplete DOAJ application; use OJS DOAJ Export plugin
Crossref DOIsRegister with CrossRef; use OJS CrossRef deposit plugin
ORCID author IDsEnable ORCID plugin in OJS; display ORCID on WP author pages
Open Archives (OAI-PMH)OJS exposes OAI-PMH automatically; submit to BASE, OpenDOAR
Social sharingUse Open Graph and Twitter Card meta tags in WordPress theme
SitemapYoast SEO or RankMath generates XML sitemap; submit to Google Search Console

12. Summary Checklist​

TaskToolStatus
Install server stack (Nginx/OLS + PHP-FPM + MariaDB)apt / CyberPanel☐
Install and configure OJSOJS installer☐
Install and configure WordPressWP installer☐
Set up SSL certificates for both domainscertbot / CyberPanel☐
Configure OJS for Platinum OA (no payments)OJS Settings☐
Connect WordPress to OJS RSS/APIWP plugins☐
Set up caching (LiteSpeed Cache or WP Super Cache)WP plugin☐
Configure SEO plugins and citation meta tagsYoast/RankMath☐
Apply for DOAJ listingDOAJ website☐
Register DOIs with CrossRefCrossRef/OJS☐
Enable ORCID plugin in OJSOJS Plugins☐
Set up staging environmentsbash/rsync☐
Configure firewalls and security pluginsUFW + Wordfence☐

References​

  1. PKP Admin Guide β€” OJS installation and configuration.
    https://docs.pkp.sfu.ca/admin-guide/en/

  2. PKP OJS REST API β€” API reference for pulling article/issue data into WordPress.
    https://docs.pkp.sfu.ca/dev/api/ojs/

  3. DOAJ Application Guide β€” Criteria and submission process.
    https://doaj.org/apply/

  4. Budapest Open Access Initiative β€” Foundational document for open access models.
    https://www.budapestopenaccessinitiative.org/

  5. Google Scholar Inclusion Guidelines
    https://scholar.google.com/intl/en/scholar/inclusion.html

  6. OpenLiteSpeed Documentation
    https://openlitespeed.org/kb/

  7. LiteSpeed Cache Plugin for WordPress
    https://wordpress.org/plugins/litespeed-cache/

  8. CyberPanel Documentation
    https://cyberpanel.net/docs/

  9. PKP Community Forum β€” WordPress Integration Discussions
    https://forum.pkp.sfu.ca/