- Fixed heredoc variable expansion in deploy.sh (was using 'EOF' preventing variable substitution) - Updated pre-deployment-check.sh to look in project root instead of staging-deployment - Fixed validate-templates.sh to use correct templates directory - Removed incorrect directory references that were breaking validation 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
114 lines
No EOL
3.1 KiB
Bash
Executable file
114 lines
No EOL
3.1 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# Template Validation Script
|
|
# Prevents templates from going live without proper structure
|
|
|
|
set -e
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
|
|
TEMPLATES_DIR="$PROJECT_DIR/templates"
|
|
|
|
# Colors
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m'
|
|
|
|
echo -e "${BLUE}=== WordPress Template Validation ===${NC}"
|
|
echo "Scanning: $TEMPLATES_DIR"
|
|
echo ""
|
|
|
|
total_files=0
|
|
passed_files=0
|
|
failed_files=0
|
|
|
|
# Function to validate a single template
|
|
validate_template() {
|
|
local file=$1
|
|
local filename=$(basename "$file")
|
|
local issues=()
|
|
|
|
echo -n "Validating $filename: "
|
|
|
|
# Check 1: Has get_header() call
|
|
if ! grep -q "get_header()" "$file"; then
|
|
issues+=("Missing get_header() call")
|
|
fi
|
|
|
|
# Check 2: Has get_footer() call
|
|
if ! grep -q "get_footer()" "$file"; then
|
|
issues+=("Missing get_footer() call")
|
|
fi
|
|
|
|
# Check 3: Has ABSPATH security check
|
|
if ! grep -q "ABSPATH" "$file"; then
|
|
issues+=("Missing ABSPATH security check")
|
|
fi
|
|
|
|
# Check 4: Uses proper WordPress container structure
|
|
if ! grep -q "content-area\|site-main" "$file"; then
|
|
issues+=("Missing proper WordPress container structure")
|
|
fi
|
|
|
|
# Check 5: Check for inline AJAX (should use wp_ajax hooks)
|
|
if grep -q "wp_ajax\|DOING_AJAX" "$file" && ! grep -q "wp_ajax_" "$file"; then
|
|
issues+=("Uses inline AJAX instead of proper wp_ajax hooks")
|
|
fi
|
|
|
|
# Check 6: Has proper template header
|
|
if ! grep -q "Template Name:" "$file"; then
|
|
issues+=("Missing Template Name header")
|
|
fi
|
|
|
|
if [ ${#issues[@]} -eq 0 ]; then
|
|
echo -e "${GREEN}✅ PASSED${NC}"
|
|
((passed_files++))
|
|
else
|
|
echo -e "${RED}❌ FAILED${NC}"
|
|
((failed_files++))
|
|
for issue in "${issues[@]}"; do
|
|
echo -e " ${RED}→ $issue${NC}"
|
|
done
|
|
fi
|
|
|
|
((total_files++))
|
|
}
|
|
|
|
# Find and validate all template files
|
|
if [ -d "$TEMPLATES_DIR" ]; then
|
|
# Find all PHP files first, then filter
|
|
while IFS= read -r file; do
|
|
filename=$(basename "$file")
|
|
# Skip non-template files
|
|
if [[ "$filename" == template-* ]] || [[ "$filename" == page-* ]] || [[ "$filename" == single-* ]]; then
|
|
validate_template "$file"
|
|
fi
|
|
done < <(find "$TEMPLATES_DIR" -name "*.php" -type f)
|
|
else
|
|
echo -e "${RED}Templates directory not found: $TEMPLATES_DIR${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
echo -e "${BLUE}=== Validation Summary ===${NC}"
|
|
echo "Total templates: $total_files"
|
|
echo -e "Passed: ${GREEN}$passed_files${NC}"
|
|
echo -e "Failed: ${RED}$failed_files${NC}"
|
|
|
|
if [ $failed_files -gt 0 ]; then
|
|
echo ""
|
|
echo -e "${RED}🚨 VALIDATION FAILED!${NC}"
|
|
echo "Fix the issues above before deploying templates."
|
|
echo "See TEMPLATE_VALIDATION_GUIDE.md for requirements."
|
|
exit 1
|
|
elif [ $total_files -eq 0 ]; then
|
|
echo ""
|
|
echo -e "${YELLOW}⚠️ No templates found to validate${NC}"
|
|
exit 0
|
|
else
|
|
echo ""
|
|
echo -e "${GREEN}🎉 ALL TEMPLATES PASSED VALIDATION!${NC}"
|
|
exit 0
|
|
fi |