Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Laravel Wordpress Laravel Package

jeffersongoncalves/laravel-wordpress

Laravel WordPress integrates Laravel apps with WordPress, offering a simple way to connect to the WordPress REST API, fetch posts and content, and sync data between your Laravel application and a WordPress site without extra boilerplate.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit

This is a thin, Laravel-idiomatic client over the WordPress REST API (/wp-json), not a WordPress runtime bridge. That distinction drives the fit: it suits Laravel applications that need to read or write WordPress content as a system of record or system of display, without embedding WordPress inside the Laravel process.

Viable architectural patterns:

  • Headless WordPress — Laravel/Inertia/Livewire front end consuming WP as a content backend, with editors retained in wp-admin.
  • Content federation — pulling posts/pages from one or more WP sites into a Laravel app for search, aggregation, or republishing.
  • Migration and backfill — scripted extraction of posts, media, categories, tags, comments, and users into a Laravel-native CMS or data store.
  • Editorial/provisioning tooling — internal admin panels that create pages, upload media, or seed taxonomy in WP without granting wp-admin access.
  • Multi-site operations — a single Laravel service managing several WP instances via per-connection config.

The facade + publishable config is the right shape for a TPM-scoped deliverable: connection settings (base URL, credentials, namespace) are externalized, so multiple environments and multiple WP targets are configuration problems rather than code problems.

What it explicitly is not: no custom post type or custom taxonomy support is documented, no ACF/meta-field handling, no Gutenberg block parsing or rendering, no plugin-specific endpoints (WooCommerce, Yoast), no caching layer, no webhooks, and no queue/batch primitives. Any of those become roadmap items or custom work, and a TPM should treat them as out of scope for v1 rather than assume they are latent.

Integration feasibility

Adoption cost is low on the Laravel side. Composer install, config publish, env credentials, facade calls — a competent Laravel developer reaches a working read path in hours. The hard prerequisites sit on the WordPress side:

  1. WordPress 5.6+ with Application Passwords enabled (disabled by default on some hosts, and commonly stripped by security plugins or blocked by .htaccess rules).
  2. HTTPS on the WP origin. Application Passwords are not offered over plain HTTP; this is a hard blocker in staging environments, which is the most common surprise during integration.
  3. A dedicated WP user with a role scoped to exactly the capabilities needed. Auth is HTTP Basic against that user, so the package's permission model is the WordPress role model — there is no separate token scoping, expiry, or per-endpoint authorization inside the package.
  4. Outbound network egress from the Laravel runtime to the WP origin, plus any WAF/CDN rules that inspect Authorization headers (some hosts strip them at the edge).

Realistic estimate: 1–3 days for a happy-path spike covering read, write, and media. 2–4 weeks to production hardening once retries, rate limiting, credential rotation, pagination, error taxonomy, and observability are added — none of which are stated features of the package.

Technical risk

Risk Severity Notes
Credential blast radius High Basic-auth app password grants the WP user's full capability set. Compromise of .env or logs equals editorial control of the site. Requires secret management, rotation, and log redaction.
First-release maturity Medium-High 1.0.0 as the first release means no public 0.x hardening period. The semver contract starts now (good for upgrade safety), but field-tested edge-case coverage is unknown.
Surface coverage gaps Medium No CPTs, custom taxonomies, meta/ACF, menus, widgets, revisions, or settings endpoints. Any real WP site will hit one of these within weeks.
Media upload quirks Medium Raw-body + Content-Disposition upload is correct per the WP API, but is sensitive to filename encoding, MIME allowlists, host upload limits, and CDN/offload plugins. Highest-variance area.
Pagination and rate limits Medium WP paginates via X-WP-Total/X-WP-TotalPages headers and caps per_page at 100. Whether the package surfaces headers or loop helpers is unstated — a TPM must confirm before committing to bulk operations.
Error semantics Medium WordPress returns structured error codes, but 401 (revoked password), 403 (role/capability), 413 (upload size), 429 (host rate limit), and 5xx (plugin fault) need distinct handling. Undocumented handling here means custom middleware.
Dependency direction Low Only depends on Laravel's HTTP client (Guzzle). Small, auditable footprint.
Single-maintainer/vendor risk Medium Mitigation is strong: every call is a plain HTTP request, so a fallback to Http::withBasicAuth() is a few lines per endpoint. Lock-in is genuinely low.

Key questions

  1. What Laravel and PHP versions are supported, and is there a CI matrix (or is it assumed-current only)?
  2. Does the package expose pagination metadata and provide iteration helpers, or must callers hand-roll ?page=/?per_page= loops?
  3. How are WP error responses surfaced — typed exceptions, Response objects, or raw arrays? Is there a retry/backoff story for 429/5xx?
  4. Is there first-class support (or a documented extension path) for custom post types and custom taxonomies? This is the single largest scope question.
  5. Does media upload support chunking, alt text, caption, and featured-image attachment in one flow, or are those separate calls?
  6. How are Application Passwords expected to be rotated, and does the package support multiple named connections in one app?
  7. Is delete a soft trash by default with explicit force, and is that distinction exposed clearly enough to prevent accidental permanent deletion?
  8. What is the support model — issues-only, paid support, or internal fork? Who owns upgrades when WP core changes the REST schema?
  9. Are there tests against a real WP instance (contract tests) or only HTTP fakes? Fakes hide schema drift.
  10. What does the "Laravel Boost" guidance actually cover — is it a usable onboarding artifact or marketing surface?

Integration Approach

Stack fit

Fits any Laravel application already using the HTTP client; no new runtime, no new service, no extension compilation. Because it wraps Illuminate\Support\Facades\Http, it inherits the ecosystem's existing tooling for free: Http::fake() in tests, Guzzle middleware, Laravel's timeout/retry configuration, Telescope and Pulse instrumentation, and Horizon visibility if calls are dispatched from jobs. For a TPM that translates to no new operational primitives to learn or monitor — a significant adoption argument.

Preferred posture: use the facade for the 80% (posts, pages, media, taxonomy, comments, users) and drop to Http::withBasicAuth() for the 20% the package does not cover, all behind a single internal service class. That keeps the package as an implementation detail rather than an architectural dependency.

Migration path

Three entry scenarios, in ascending cost:

  1. Greenfield headless build — no migration; the package is the content layer from day one. Lowest risk, adopt directly.
  2. Replacing ad-hoc wp-json calls — most common. Inventory existing Http:: calls to /wp-json, map each to a package method, and consolidate auth and base-URL handling into published config. Expect a 1–2 sprint cleanup with net code deletion.
  3. Replacing a WordPress plugin or embedded WP install — the package covers content CRUD but not the plugin's business logic. Requires a per-endpoint gap analysis before commitment; do not assume parity.

Compatibility

  • Verify the target WP version supports Application Passwords and that no security plugin has disabled them (§ above).
  • Confirm behaviour on WordPress Multisite — the namespace is per-site, and network-level users behave differently; unverified.
  • Confirm the target's REST namespace is default (wp/v2); the config option suggests it is overridable, which matters for namespaced or version-pinned setups.
  • Check for hosting constraints: max upload size, request timeouts, mod_security rules on Authorization, and any CDN that strips or caches authenticated responses.
  • Note that plugins altering REST responses (security suites, API customizers, field filters) can change payload shape without changing the package version.

Sequencing

  1. Week 1 — Spike. Read-only: list/get posts and pages against a staging WP over HTTPS. Confirms network, auth, and config. Exit criterion: a real post rendered from WP data.
  2. Week 2 — Auth and secrets hardening. Dedicated WP service user with a minimal role; credentials in a secret manager; rotation runbook drafted; log redaction verified.
  3. Week 3 — Taxonomy, comments, users. Read paths plus category/tag CRUD. Validates the write path end to end at low blast radius.
  4. Week 4 — Media. Upload/update/delete in staging. Budget extra time; this is the highest-variance area (filenames, MIME types, size limits, offload plugins).
  5. Week 5 — Write paths behind a feature flag. Create/update for posts and pages, gated and logged, with a manual review step before publishing. Deletes disabled or trash-only.
  6. Week 6 — Reliability layer. Retries with backoff, timeouts, pagination helpers, error taxonomy, dashboards, alerts.
  7. Post-launch — Destructive operations. Enable force-delete only after trash-based flows have run cleanly for a full cycle.

Do not parallelize steps 2 and 5. Write access before credential scoping is the failure mode that turns a content bug into a content incident.

Operational Impact

Maintenance

Two independent upgrade clocks now govern the integration: the package's releases and the WordPress site's core/plugin updates. The second is the one that bites — WordPress ships REST schema changes and plugins silently alter payloads, and neither appears in the package's changelog. Assign explicit ownership: someone must re-run contract tests against the target WP version on every WP core upgrade and every plugin update touching the REST API.

Because 1.0.0 is the first release, semver now applies: subsequent breaking changes should arrive as majors. That is a favourable posture for a TPM planning upgrade windows, but the maintainer's track record is unproven — pin to a caret range and review changelogs on minor bumps.

Application Password rotation should be scheduled, not incidental. Rotating a credential shared by several services requires a coordinated dual-credential window; build the package's config to read from a secret store so rotation is a config change, not a deploy.

Support

Expect community-grade support: issues, no SLA, no vendor escalation path. Two mitigations reduce this to manageable: (a) the package is thin enough that reading its source is faster than waiting for a response, and (b) every call maps to a documented WP endpoint, so an internal fork or a direct Http::withBasicAuth() fallback is always available. Budget a small internal owner — roughly 10–15% of one engineer — rather than assuming zero-touch dependency.

The "Laravel Boost guidelines and development skill" artifact is worth evaluating concretely: if it produces accurate, current usage patterns in an AI-assisted workflow, it materially shortens ramp-up; if it drifts from the actual API, it becomes a source of confidently wrong code. Treat it as documentation that needs the same review as the README.

Scaling

Scaling pressure comes almost entirely from the WordPress origin, not from Laravel. Three characteristics to plan around:

  • Synchronous latency. Every operation is a blocking HTTP round trip to WP. A list-plus-detail page fanning out to 40 posts is 41 sequential calls. Move bulk and any user-facing-but-non-blocking work to queued jobs, and prefer embedding what you need in the list payload over per-item fetches.
  • Pagination ceilings. WP caps per_page at 100. Full-content syncs must iterate pages; a 50k-post site is 500 requests before any per-item work. Use _fields and per_page=100 to keep payloads and request counts down.
  • Origin capacity. Shared WordPress hosting and many managed WP hosts rate-limit or throttle API traffic. Aggressive sync jobs can degrade the editorial experience for humans using wp-admin. Schedule heavy jobs off-peak and add client-side concurrency limits.

For read-heavy public traffic, put a cache between Laravel and WP (response cache or an indexed local mirror). The package provides no caching; without one, WP becomes a hard dependency on your critical rendering path, and its uptime becomes your uptime.

Failure modes

Failure Symptom Mitigation
App password revoked or user deleted Uniform 401 across all operations Alert on 401 rate; rotation runbook; dual-credential window during rollover
WP user role reduced 403 on specific endpoints only (often media or delete) Dedicated service user with documented minimum role; capability smoke test in CI
WP origin down or timeout Laravel request latency spikes; queued jobs back up Short timeouts, circuit breaker, cached fallback for read paths
Rate limiting (429) or WAF block Intermittent failures under load, more on bulk jobs Exponential backoff, job throttling, egress IP allowlist on the WP side
Media upload rejection 413 or 400 on specific files only Pre-flight size/MIME validation in Laravel; test the host's real limits
Plugin or core update changes payload Silent nulls or missing fields, no exception raised Contract tests against staging WP; schema assertions on critical reads
Accidental permanent delete Content unrecoverable Default to trash; gate force-delete behind explicit flag; WP-side backups verified
Credentials leaked in logs Undetected until incident Redact Authorization in logging and exception reporting; secret store, not .env on disk
Package abandoned No fixes for new WP schema changes Thin-wrapper fallback to Http::withBasicAuth(); keep integration behind one internal service class

Ramp-up

For a Laravel developer, the package itself is a half-day of learning — it reads like the framework it wraps. The real ramp-up is WordPress domain knowledge, which is not in the package: role and capability semantics, the difference between trash and force delete, application password provisioning, REST namespace and plugin interference, media handling with offload plugins, and what X-WP-* headers mean. Plan 1–2 weeks for a developer new to WordPress to operate this safely, versus 2–3 days for someone who already knows the WP admin and REST API.

Onboarding assets to produce internally, because the package will not: a connection-provisioning checklist (HTTPS, app password, role, egress, WAF), an endpoint coverage matrix showing what the package handles versus what needs raw HTTP, and an error-handling runbook mapping WP status codes to remediation. The Boost guidelines are a starting point, not a substitute — verify any generated code against the actual endpoint behaviour before it reaches production.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
uni-method/symfony-lib
tacticmedia/scim-server-bundle
neika-ai/symfony-bundle
mattleads/agent-publishing-bundle
glavweb/framework-bundle
glavweb/extra-bundle
glavweb/api-bundle
glavweb/admin-bundle
adachsoft/api-version-bundle
elsayed85/laravel-api-exceptions
ouhssini/laravel-demo-mode
daworks/ncloud-outbound-mailer-driver
gp247/cms
ignibyte/aic-gates
nexa-merchant/blog
novasa/laravel-language-center
opencage/geocode
adolfoholzer/parameters
livenetworks/ln-starter
cgv/localized-resource