<?php
/**
* Plugin Name: Kategorien Grid Übersicht
* Description: Zeigt WooCommerce-Kategorien in einem modernen Grid im Backend mit Bildfeldern.
* Version: 1.0
* Author: Florian
*/

 

if (!defined(‚ABSPATH‘)) exit;

 

// — ADMIN MENÜ —
add_action(‚admin_menu‘, function () {
    add_menu_page(
        ‚Kategorien Übersicht‘,
        ‚Kategorie Übersicht‘,
        ‚manage_options‘,
        ‚kategorien-uebersicht‘,
        ‚kg_render_admin_page‘,
        ‚dashicons-grid-view‘,
        26
    );
});

 

// — ADMIN SEITE RENDERN —
function kg_render_admin_page() {

 

    // Kategorien laden
    $categories = get_terms([
        ‚taxonomy‘   => ‚product_cat‘,
        ‚hide_empty‘ => false,
    ]);

 

    echo ‚<div class=“wrap“><h1>Kategorien Übersicht</h1>‘;
    echo ‚<style>
        .kg-grid {
            display: grid;
            grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
            gap: 20px;
            margin-top: 30px;
        }
        .kg-card {
            border: 1px solid #ddd;
            padding: 15px;
            border-radius: 10px;
            background: #fff;
            text-align: center;
            box-shadow: 0 0 8px rgba(0,0,0,0.05);
        }
        .kg-card img {
            width: 100%;
            height: 140px;
            object-fit: cover;
            border-radius: 8px;
            margin-bottom: 10px;
            background: #f8f8f8;
        }
        .kg-save-btn {
            margin-top: 10px;
        }
    </style>‘;

 

    echo ‚<form method=“post“ enctype=“multipart/form-data“>‘;
    echo ‚<div class=“kg-grid“>‘;

 

    foreach ($categories as $cat) {

 

        // Custom Bild holen
        $custom_img_id = get_term_meta($cat->term_id, ‚custom_category_image‘, true);
        $img_url = $custom_img_id ? wp_get_attachment_url($custom_img_id) : “;

 

        echo ‚<div class=“kg-card“>‘;
        echo ‚<h3>‘ . esc_html($cat->name) . ‚</h3>‘;

 

        if ($img_url) {
            echo ‚<img src=“‚ . esc_url($img_url) . ‚“>‘;
        } else {
            echo ‚<img src=“https://via.placeholder.com/300×140?text=Kein+Bild“>‘;
        }

 

        echo ‚<p><input type=“file“ name=“cat_img_‘ . $cat->term_id . ‚“></p>‘;
        echo ‚</div>‘;
    }

 

    echo ‚</div>‘; // Grid
    echo ‚<input type=“submit“ class=“button button-primary kg-save-btn“ name=“kg_save“ value=“Speichern“>‘;
    echo ‚</form></div>‘;

 

    kg_handle_save($categories);
}

 

// — SPEICHERN —
function kg_handle_save($categories)
{
    if (!isset($_POST[‚kg_save‘])) return;

 

    foreach ($categories as $cat) {

 

        $input_name = ‚cat_img_‘ . $cat->term_id;

 

        if (!empty($_FILES[$input_name][’name‘])) {

 

            // Bild hochladen
            require_once(ABSPATH . ‚wp-admin/includes/file.php‘);
            $upload = wp_handle_upload($_FILES[$input_name], [‚test_form‘ => false]);

 

            if (!isset($upload[‚error‘])) {
                $wp_filetype = $upload[‚type‘];
                $filename = $upload[‚file‘];

 

                $attachment = [
                    ‚post_mime_type‘ => $wp_filetype,
                    ‚post_title‘     => sanitize_file_name($filename),
                    ‚post_content‘   => “,
                    ‚post_status‘    => ‚inherit‘
                ];

 

                $attach_id = wp_insert_attachment($attachment, $filename);
                require_once(ABSPATH . ‚wp-admin/includes/image.php‘);
                $attach_data = wp_generate_attachment_metadata($attach_id, $filename);
                wp_update_attachment_metadata($attach_id, $attach_data);

 

                update_term_meta($cat->term_id, ‚custom_category_image‘, $attach_id);
            }
        }
    }

 

    echo ‚<div class=“updated“><p>Bilder gespeichert!</p></div>‘;
}