Portfolio content enrichment
Puluno SEO can add short excerpts, sync SEO meta, and suggest alt text for photos on typical portfolio / reference / case study posts — using the project title and your site name.
Works on any WordPress site with the plugin installed. A legacy floor-industry copy mode exists via the
puluno_enrich_legacy_floor_copyfilter for specialized themes.
What the plugin detects
Default post types (extend with puluno_portfolio_post_types):
project,portfolio,jetpack-portfolio,case_study,reference
For each project it collects images from:
- featured image,
- attachments whose parent is the project,
- images embedded in content (Gutenberg
image/gallery,[gallery]shortcode,wp-image-123class).
When changes happen
- Save on a portfolio post or Woo product — excerpt / related alts when empty or low quality.
- Content audit in Puluno SEO (Fixes / smart fix) — walks portfolio, products, pages, and the media library; does not overwrite good manual copy.
- Front end — empty
altuses the attachment parent or a portfolio index (image only in post content,post_parent = 0). The index is built once per request, not a full product/page scan.
Recommended workflow
- Use a dedicated portfolio post type or Jetpack Portfolio; add custom slugs via the filter above if needed.
- For each item: title + at least one photo (featured or gallery in content).
- Run audit / alt fill once after migration, then after large photo batches.
- For Woo: main and gallery images get product-style alt text (generic product wording + site brand).
WooCommerce and pages
- Products — SEO title/description from name and description; alt on featured and gallery images.
- Pages and posts — SEO meta where missing; featured image alt uses “page title — brand”.
For theme developers
add_filter('puluno_portfolio_post_types', function (array $types): array {
$types[] = 'my_work';
return array_values(array_unique($types));
});
Custom image ID list for a project:
add_filter('puluno_enrich_portfolio_image_ids', function (?array $ids, int $post_id): ?array {
return [123, 456, 789];
}, 10, 2);