Didac Soria / WordPress & Custom Code
WordPress Development Portfolio: Custom Code, Plugins and Automation
I do not build features to fill a technology list. I write Custom WordPress Code when it solves an editorial, technical or business problem that standard configuration cannot solve well.
This WordPress Development Portfolio brings together real Plugins, Multilingual Architecture, responsive interfaces, reversible migrations and WP-CLI Automation. Each case explains what had to work, how I structured it and which part of the code demonstrates the decision.

01 / Overview
Code Built for Real Constraints.
My WordPress Plugin Development examples are not isolated exercises. DS Portfolio reorganizes a visual library without changing its original content. WP CVDS turns seven legacy modules into one maintainable Plugin and protects private documents. The didacsoria.com CPT system keeps clean URLs and related translations. WP-CLI tools make bulk changes reviewable, backed up and verifiable.
8
Verified CV templates
7
Legacy modules consolidated
5
DS Portfolio shortcodes
3
Languages in WP CVDS
Counts from project code and documentation · common scale from 0 to 8
The numbers describe the scope of the reviewed software: DS Portfolio 1.3.3 and WP CVDS 1.2.0. They do not represent traffic, revenue or commercial results.
| What the Person Sees | What the System Handles | Evidence on This Page |
|---|---|---|
| Clear filters and search | Bilingual records, Taxonomies and accessible rendering | DS Portfolio and conditional loading |
| A CV that works on mobile | Responsive navigation and private documents | WP CVDS and a signed token |
| Consistent URLs by language | Public CPTs, Polylang and exact rules | Routing Architecture |
| Repeatable bulk changes | Dry run, backup, apply and verification | WP-CLI Automation |

02 / Featured Plugin
DS Portfolio 1.3.3
StudioDDC needed to present Web Design, Graphic Design and WordPress Themes with useful filters, search, sorting, a lightbox and touch behavior. The challenge was to migrate without changing Posts, Polylang translations, Taxonomies, Pretty Links or image metadata.
Explore the public WordPress collection on StudioDDC
Model
One private record keeps English and Spanish fields and references existing attachments.
Interface
Accessible filters, optional search, Grid or Masonry layouts and touch-specific behavior.
Change Safety
Pre-migration audit, reversible migration, incremental state, verification and rollback.
Real Excerpt / PHP
Load Assets Only Where They Are Used
The Plugin checks the page content and loads CSS and JavaScript only when one of its Shortcodes is present.
foreach ( array_merge( array_keys( self::$services_shortcodes ), array_keys( self::$shortcodes ) ) as $shortcode ) {
if ( has_shortcode( $post->post_content, $shortcode ) ) {
self::enqueue_assets();
return;
}
}Source: ds-portfolio/includes/class-ds-portfolio-renderer.php
03 / WP CVDS
One Plugin for a Complete Professional Experience.
WP CVDS 1.2.0 consolidates seven original modules into one Plugin for `cv.didacsoria.com`. It preserves EN, ES and CA navigation, scrolling, a responsive interface, eight verified Widget templates, login Branding and private downloads.
Protection limits access to 5 attempts for 15 minutes, verifies the PIN against a hash, signs a token with WordPress salts and delivers PDFs from a private folder outside Uploads.

Real Excerpt / PHP Security
Signed, Expiring Access Token
The token does not store the PIN. It combines an expiry time with an HMAC signature tied to the WordPress installation.
$payload = 'cvds|' . (int) $expires;
$signature = hash_hmac( 'sha256', $payload, wp_salt( 'auth' ) );
return (int) $expires . '.' . $signature;Source: wp-cvds/includes/access.php

04 / Multilingual Architecture
Translatable Content With Page-Like URLs.
On didacsoria.com, `ds_service` and `ds_portfolio` are public Content Types supporting Gutenberg, Revisions, Featured Images, Excerpts, Custom Fields and hierarchy. Polylang links their language versions and the system generates root routes without an artificial CPT base.
The English URL for this case will be `/wordpress-development-portfolio/`; the Spanish version will be `/es/portfolio-desarrollo-wordpress/`. They are independent entries linked as translations and ready for distinct Yoast metadata.
Real Excerpt / WordPress + Polylang
Language Prefix Only When Required
The route is built from the hierarchy and adds a prefix when the content does not use the default language.
$language = ds_get_root_content_language( $post->ID );
if ( '' !== $language && $language !== $default_language ) {
array_unshift( $parts, $language );
}
return implode( '/', array_filter( $parts ) );Source: ds-content-types.php
05 / Automation
WP-CLI for Changes That Can Be Reviewed and Repeated.
My WordPress Automation tools separate checks, dry runs and application. The Media metadata updater identifies exact files, calculates Title, ALT and Description values, displays a change table and creates a JSON backup before writing.
| Stage | What It Checks | Practical Value |
|---|---|---|
| Check | Plugins, CPTs, languages, links and files | Fails before writing when a dependency is missing |
| Dry Run | Matched records and planned changes | Makes the scope reviewable |
| Backup | Original values in JSON | Keeps a clear recovery path |
| Apply | Validated records only | Avoids broad and imprecise changes |
| Verify | Content, metadata, Media and relationships | Checks the final state |

Real Excerpt / WP-CLI Automation
Backup Before Media Changes
If the backup cannot be written, the command stops before updating a single attachment.
$backup_file = ABSPATH . 'ds-media-seo-backup-' . gmdate( 'Ymd-His' ) . '.json';
$encoded = wp_json_encode( $backup, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE );
if ( false === file_put_contents( $backup_file, $encoded ) ) {
WP_CLI::error( 'Could not create the JSON backup. No attachments were modified.' );
}Source: wpcli-update-media-seo-en.php
06 / Front-End Delivery
Small Code When a Small Solution Is Enough.
Not every problem needs a large Plugin. The Services Grid Shortcode uses real WordPress IDs to retrieve the Link, Featured Image and Excerpt. If the Post does not exist, it prints no broken link; if it has no image, the card remains usable.
This is an important part of my work as a WordPress Developer: match the size of the solution to the problem, keep content editable and check what happens when data is missing.
Real Excerpt / WordPress Integration
Real Data Instead of Hard-Coded URLs
The link, image and summary are read from the WordPress object the team already maintains.
$permalink = get_permalink( $post_id );
if ( ! $permalink ) {
continue;
}
$image_url = get_the_post_thumbnail_url( $post_id, 'large' );
$excerpt = wp_strip_all_tags( get_the_excerpt( $post_id ) );Source: ds-services-shortcode.php
Other Parts of the Same System
Read-Only Portfolio Audit
Exports Posts, Taxonomies, Media, Polylang and Pretty Links to JSON with a SHA-256 hash before migration.
Bilingual Content Deployment
Creates independent EN/ES content, links translations and configures Yoast and Media from WP-CLI.
Responsive Portfolio Rendering
Uses responsive images, lazy loading, asynchronous decoding and explicit priority for the first item.
Frequently Asked Questions
What This Code Portfolio Demonstrates.
Are these real code examples?
Yes. The excerpts come from DS Portfolio, WP CVDS, the didacsoria.com CPT system and WP-CLI tools in the reviewed projects. They are shortened for readable presentation.
Do you also work with Gutenberg and Genesis?
Yes. This page uses Native Gutenberg Blocks, and several public projects and Plugins integrate with WordPress, Genesis Framework and its Hooks.
Can you work on an existing installation?
Yes. I first review the Architecture, dependencies, data and risks. I then propose the smallest change that can be maintained, tested and reversed.
What can a Custom WordPress Development project include?
It can include Plugins, Themes, CPTs, Taxonomies, Gutenberg, WooCommerce, APIs, WP-CLI, migrations, Security, Performance and documentation according to the real requirement.
Do You Have a Specific Technical Requirement?
Tell Me What WordPress Needs to Do.
I can review an existing installation, design the Architecture and build the missing piece. You work directly with the person who analyzes, writes, tests and documents the Code.









