<?php
/**
 * Plugin Name:       Auto Breadcrumbs by ConvertAtlas
 * Plugin URI:        https://convertatlas.org/en/wordpress/auto-breadcrumbs
 * Description:       Accessible breadcrumb navigation via the [ca_breadcrumbs] shortcode or ca_breadcrumbs() template tag. Lightweight, schema-friendly and styleable.
 * Version:           1.0.0
 * Requires at least: 5.5
 * Requires PHP:      7.4
 * Author:            ConvertAtlas
 * Author URI:        https://convertatlas.org
 * License:           GPL-2.0-or-later
 * Text Domain:       ca-breadcrumbs
 *
 * Built with convertatlas.org — free developer tools & templates.
 */

if (!defined('ABSPATH')) { exit; }

final class CA_Breadcrumbs {

    public static function init() {
        $self = new self();
        add_shortcode('ca_breadcrumbs', array($self, 'shortcode'));
        add_action('wp_head', array($self, 'styles'));
    }

    public function shortcode($atts) {
        return $this->build();
    }

    public function build() {
        if (is_front_page()) return '';
        $sep = '<span class="ca-bc-sep" aria-hidden="true">›</span>';
        $items = array();
        $items[] = '<a href="' . esc_url(home_url('/')) . '">Home</a>';

        if (is_singular()) {
            $post = get_queried_object();
            if (is_singular('post')) {
                $cats = get_the_category($post->ID);
                if (!empty($cats)) {
                    $cat = $cats[0];
                    $items[] = '<a href="' . esc_url(get_category_link($cat->term_id)) . '">' . esc_html($cat->name) . '</a>';
                }
            } elseif (is_page() && $post->post_parent) {
                $parents = array_reverse(get_post_ancestors($post->ID));
                foreach ($parents as $pid) {
                    $items[] = '<a href="' . esc_url(get_permalink($pid)) . '">' . esc_html(get_the_title($pid)) . '</a>';
                }
            }
            $items[] = '<span aria-current="page">' . esc_html(get_the_title($post->ID)) . '</span>';
        } elseif (is_category() || is_tag() || is_tax()) {
            $items[] = '<span aria-current="page">' . esc_html(single_term_title('', false)) . '</span>';
        } elseif (is_search()) {
            $items[] = '<span aria-current="page">Search: ' . esc_html(get_search_query()) . '</span>';
        } elseif (is_404()) {
            $items[] = '<span aria-current="page">Not found</span>';
        } elseif (is_archive()) {
            $items[] = '<span aria-current="page">' . esc_html(get_the_archive_title()) . '</span>';
        } else {
            return '';
        }

        return '<nav class="ca-breadcrumbs" aria-label="Breadcrumb">' . implode(' ' . $sep . ' ', $items) . '</nav>';
    }

    public function styles() {
        echo "\n<style id=\"ca-breadcrumbs-css\">.ca-breadcrumbs{font-size:.9rem;color:#666;margin:0 0 1rem;display:flex;flex-wrap:wrap;gap:.4rem;align-items:center}.ca-breadcrumbs a{color:inherit;text-decoration:none}.ca-breadcrumbs a:hover{text-decoration:underline}.ca-bc-sep{opacity:.6}</style>\n";
    }
}

add_action('init', array('CA_Breadcrumbs', 'init'));

/** Template tag: echo ca_breadcrumbs() in your theme. */
if (!function_exists('ca_breadcrumbs')) {
    function ca_breadcrumbs() {
        $bc = new CA_Breadcrumbs();
        echo $bc->build();
    }
}