PubMed Publications
A lightweight WordPress plugin that pulls PubMed/NCBI publications for each author (e.g., physicians) and renders Divi-friendly publication cards.
by Michael Gresh - Alt Dev Studios · github.com/michaelgresh/pubmed-publications
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/michaelgresh/pubmed-publications/archive/refs/heads/main.zipA lightweight WordPress plugin that pulls PubMed/NCBI publications for each author (e.g., physicians) and renders Divi-friendly publication cards—no hand-curating posts or heavyweight academic stacks.
- Custom Post Type:
pubmed_publication(renameable) - Taxonomy (per-author/doctor):
pubmed_doctor(renameable) - Shortcodes for Latest and Per-Author lists
- Optional modal viewer so PubMed/PMC pages open inside your site
- Sorting that matches PubMed’s “Most Recent” (uses
sortpubdate → epubdate → pubdate) - Delete authors/doctors from the admin with two safe modes (+ success notices)
This repo typically contains a single plugin file, e.g.
pubmed-publications/pubmed-publications.php.
Features
- Pulls from PubMed via NCBI E-utilities (
esearch+esummary) - Accurate dates: stores an ISO date using
sortpubdatewhen available (falls back toepubdate, thenpubdate), and syncs WPpost_datefor consistent sorting - Chronological lists (newest → oldest), no year separators
- Bibliography links per author/doctor (MyNCBI or PubMed results pages)
- If a PubMed results URL contains
?term=..., the plugin extracts the term to mirror that exact search when importing
- If a PubMed results URL contains
- Modal open (optional) for PubMed/PMC links
- Caching via WordPress transients (default 6h); manual Fetch bypasses cache
- De-duplication by PMID (falls back to title)
- Admin: Delete doctor with two safe modes:
- Delete doctor (keep publications) → removes the taxonomy term; posts remain
- Delete doctor + publications (exclusive only) → moves exclusive posts to Trash; co-authored posts are kept (doctor detached)
- Admin notices show success messages after actions
- Divi-friendly HTML/CSS out of the box
- Single top-level admin menu for a clean UX
Requirements
- WordPress 6.0+
- PHP 7.4+ (8.x supported)
- A monitored email address (set in the plugin constant) to comply with NCBI’s tool policy
🔧 Install
- Create the folder:
wp-content/plugins/pubmed-publications/ - Copy the plugin file into that folder (e.g.,
pubmed-publications.php). - Activate PubMed Publications in Plugins.
After activation, you’ll see a single admin menu: PubMed Publications
- Authors & Import (setup + fetch + delete)
- Publications (CPT list)
- Add New (optional manual entries)
Admin: Authors & Import
Add an author/doctor
- Name: e.g.,
JohnsonorJones(used as the taxonomy term) - PubMed query: supports boolean OR and parentheses
Example:(Johnson A[au] OR Johnson AM[au]) AND (YourHospital[ad] OR YourCity[ad])[au]= author,[ad]= affiliation- Do not put the entire expression in quotes
- Bibliography URL (optional): any public link (MyNCBI or PubMed results)
- If it’s a PubMed results URL containing
?term=, the plugin automatically extracts and uses thattermfor fetching so your site mirrors the exact search. - If it’s a MyNCBI bibliography page (e.g.,
https://www.ncbi.nlm.nih.gov/myncbi/.../bibliography/public/), the link is displayed, and imports use the stored query.
- If it’s a PubMed results URL containing
Click Save → Fetch/Refresh (per author or ALL).
What happens on fetch
- The plugin queries PubMed for the newest items (default up to 100).
- It creates/updates
pubmed_publicationposts, attached to the author taxonomy term. - It stores:
pubmed_pmid,pubmed_pmcid,pubmed_doi,pubmed_journalpubmed_pubdate_display(nice string, prefers Epub date)pubmed_pubdate_iso(YYYY-MM-DD, fromsortpubdate/epubdate/pubdate)pubmed_url(PubMed article URL)
- It also sets the WordPress
post_dateto the ISO date so sorting is consistent everywhere.
Deleting an author/doctor (safe options)
From Authors & Import, each row has a Delete control with two modes:
- Delete doctor (keep publications): removes the taxonomy term. Existing posts remain; the doctor is detached.
- Delete doctor + publications (exclusive only):
- Posts that are only tagged with this doctor are moved to the Trash (not permanently deleted).
- Posts with multiple doctors are kept; this doctor is detached.
After deletion, a success notice confirms what happened.
Tip: If you want an extra guardrail, add a “type the name to confirm” field in the delete form. (Optional snippet available in the issues/wiki.)
Shortcodes
Prefix note: The examples below use the current shortcode names (
pubmed_...). If you rename your prefixes in code, adjust accordingly (e.g.,pubmed_publications).
Latest across all authors
[pubmed_latest_publications
limit="10"
open="modal"
title="Latest Publications"
subtitle=""
anchor=""
heading="h2"]
Per-author list
[pubmed_publications
doctor="Johnson"
limit="10"
open="modal"
title="Dr. Johnson — Recent Publications"
subtitle=""
anchor="johnson"
heading="h2"
show_bibliography="true"
bib_label="View full bibliography"]
Attributes
doctor– taxonomy term name (e.g.,Johnson,Jones) — represents the authorlimit– number of items (default10)open–modalornewtab(defaultnewtab)title,subtitle,anchor,heading– section header options (heading:h2..h5)show_bibliography–true|false(defaulttruefor per-author)bib_label– link text for the bibliography button
year_groupsis ignored (kept for backward compatibility).
Styling
Minimal CSS is inlined by the plugin and designed to play nicely with Divi.
Available classes:
.pubmed-section-header,.pubmed-section-title,.pubmed-section-subtitle.pubmed-bib-link.pubmed-grid(responsive grid).pubmed-card,.pubmed-title,.pubmed-meta,.pubmed-authors,.pubmed-links a
Example override (Divi → Theme Options → Custom CSS)
.pubmed-card { border-radius: 14px; }
.pubmed-title { font-size: 1.05rem; }
.pubmed-meta em { font-style: italic; }
Data model
- Post Type:
pubmed_publication(renameable)post_date: synced to the article’s ISO date for consistent sorting
- Taxonomy:
pubmed_doctor(renameable)- Term Meta:
pubmed_query– PubMed query (boolean OR supported)pubmed_bib_url– public bibliography URL (MyNCBI or PubMed results)
- Term Meta:
- Post Meta:
pubmed_pmid,pubmed_pmcid,pubmed_doipubmed_journal,pubmed_authorspubmed_pubdate_display(string shown on cards)pubmed_pubdate_iso(YYYY-MM-DD, used for sorting)pubmed_url(PubMed URL)
Caching & rate limits
- Results from PubMed API are cached for 6 hours (change
CACHE_HOURS). - The Fetch/Refresh action bypasses the cache.
- The plugin sends
tooland your email to NCBI. Updateconst EMAILto a monitored address.
Date logic (why it sorts correctly)
PubMed has several dates:
sortpubdate(used by PubMed to sort “Most Recent”)epubdate(online first)pubdate(print)
We use: sortpubdate → epubdate → pubdate to build an ISO date and set post_date to that value.
Cards show the display date (prefers Epub string if present).
This avoids issues like “Epub 2024 / Print 2025” appearing under the wrong year or out of order.
Maintenance
- Periodically click Fetch/Refresh ALL to pull new publications.
- If you imported before the date logic existed, use Rebuild Dates to re-sync
post_datefrom stored ISO dates. - To refine results: expand author variants and/or add an affiliation clause
e.g.,(Johnson A[au] OR Johnson AM[au]) AND (YourHospital[ad] OR YourCity[ad])
Troubleshooting
Nothing imports for an author
- Remove outer quotes around the entire query.
- Test your query directly at PubMed (confirm results).
- If using a bibliography URL, ensure it’s a PubMed results link with
?term=for import mirroring. MyNCBI bibliography pages are displayed only, not parsed for the term.
Sorting looks wrong
- Ensure you’re on the latest plugin with
sortpubdatelogic. - Click Fetch/Refresh for that author (or ALL).
- Run Rebuild Dates (optional) to re-sync
post_date.
I see duplicates
- The plugin dedupes on PMID, falling back to title. If an item appears twice in PubMed under different PMIDs, it can appear twice here (expected).
Security & Privacy
- Fetches public bibliographic data from PubMed (no PHI).
- Follows NCBI’s E-utilities guidelines (
tool+email). - Stores no sensitive data beyond publication metadata.
Development notes
- Single-file plugin for portability.
- Hooks:
admin_post_pubmed_save_doctorsadmin_post_pubmed_fetchadmin_post_pubmed_rebuild_dates(optional)admin_post_pubmed_delete_doctor
- Easy extension ideas:
- Add EFetch to store abstracts
- Add WP-Cron weekly refresher
- Add a second taxonomy for Posters/Presentations
- Add “type the name to confirm” before deletion
Versioning
1.2.0— Delete doctor (keep vs. delete exclusive to doctor → Trash), admin success notices; consolidated admin language.1.1.0— Bibliography links, section headers, modal, PubMed term extraction from results URLs, date logic (sortpubdate) +post_datesyncing, single chronological lists (no year separators).
License
MIT (or update to your preferred license).
Maintainers
- Your organization / site vendor
- Dev contact: update
const EMAILin the plugin for NCBI contact and support
Quick Start (TL;DR)
- Activate the plugin.
- PubMed Publications → Authors & Import
- Add an author, e.g., query:
(Johnson A[au] OR Johnson AM[au]) AND (YourHospital[ad] OR YourCity[ad]) - Add bibliography URL (e.g., MyNCBI public page)
- Save → Fetch/Refresh
- Add an author, e.g., query:
- In your Divi page:
[pubmed_latest_publications title="Latest Publications" limit="10" open="modal"] [pubmed_publications doctor="Johnson" title="Dr. Johnson’s Recent Publications" show_bibliography="true" open="modal"] - (Optional) Delete a test author to see the safe delete modes + notices.
- Done.