feat: Implement WordPress publishing and unpublishing actions

- Added conditional visibility for table actions based on content state (published/draft).
- Introduced `publishContent` and `unpublishContent` API functions for handling WordPress integration.
- Updated `Content` component to manage publish/unpublish actions with appropriate error handling and success notifications.
- Refactored `PostEditor` to remove deprecated SEO fields and consolidate taxonomy management.
- Enhanced `TablePageTemplate` to filter row actions based on visibility conditions.
- Updated backend API to support publishing and unpublishing content with proper status updates and external references.
This commit is contained in:
alorig
2025-11-26 01:24:58 +05:00
parent ba842d8332
commit 53ea0c34ce
13 changed files with 1249 additions and 417 deletions

View File

@@ -1011,23 +1011,39 @@ class ContentIdeasViewSet(SiteSectorModelViewSet):
created_tasks = []
for idea in ideas:
# Stage 3: Inherit metadata from idea
# STAGE 3: Map idea fields to final Task schema
# Map site_entity_type → content_type
content_type = idea.site_entity_type or 'post'
# Map cluster_role → content_structure
# hub → article, supporting → guide, attribute → comparison
role_to_structure = {
'hub': 'article',
'supporting': 'guide',
'attribute': 'comparison',
}
content_structure = role_to_structure.get(idea.cluster_role, 'article')
# Create task with Stage 1 final fields
task = Tasks.objects.create(
title=idea.idea_title,
description=idea.description or '',
keywords=idea.target_keywords or '',
cluster=idea.keyword_cluster,
idea=idea,
content_type=content_type,
content_structure=content_structure,
taxonomy_term=None, # Can be set later if taxonomy is available
status='queued',
account=idea.account,
site=idea.site,
sector=idea.sector,
# Stage 3: Inherit entity metadata (use standardized fields)
entity_type=(idea.site_entity_type or 'post'),
taxonomy=idea.taxonomy,
cluster_role=(idea.cluster_role or 'hub'),
)
# Link keywords from idea to task
if idea.keyword_objects.exists():
task.keywords.set(idea.keyword_objects.all())
created_tasks.append(task.id)
# Update idea status
idea.status = 'scheduled'
idea.save()