diff --git a/wp-multi.php b/wp-multi.php index 62631d0..ae67362 100644 --- a/wp-multi.php +++ b/wp-multi.php @@ -3,11 +3,12 @@ * Plugin Name: WP Multi * Plugin URI: https://git.viper.ipv64.net/M_Viper/wp-multi * Description: Erweiterter Anti-Spam-Schutz mit Honeypot, Keyword-Filter, Link-Limit und mehr. Jetzt mit Statistik im Dashboard und HappyForms-Integration. - * Version: 3.0 + * Version: 3.2 * Author: M_Viper * Author URI: https://m-viper.de * Requires at least: 6.7.2 * Tested up to: 6.7.2 + * PHP Version: 7.2 * License: GPL2 * License URI: https://www.gnu.org/licenses/gpl-2.0.html * Text Domain: wp-multi @@ -311,7 +312,9 @@ function check_disposable_email($commentdata) { // Die Funktion wird beim Absenden eines Kommentars ausgeführt add_filter('preprocess_comment', 'check_disposable_email'); - + + + /* * Text Copy Schutz und Schutz vor Entwicklertools */ @@ -3476,7 +3479,6 @@ function wp_multi_display_dashboard_widget() { * Gast Autoren */ - // Gast-Autor Eingabefeld in der Sidebar im Admin-Bereich hinzufügen function wp_multi_add_guest_author_field() { add_meta_box( @@ -3492,7 +3494,6 @@ add_action('add_meta_boxes', 'wp_multi_add_guest_author_field'); // Callback-Funktion, die das Eingabefeld anzeigt function wp_multi_guest_author_field($post) { - // Die Metadaten des Beitrags laden (ob ein Gast-Autor gesetzt ist) $guest_author = get_post_meta($post->ID, '_guest_author', true); ?> @@ -3502,13 +3503,8 @@ function wp_multi_guest_author_field($post) { // Speichern der Gast-Autor Daten function wp_multi_save_guest_author_meta($post_id) { - // Sicherheit: Verhindere, dass die Metadaten beim Autosave überschrieben werden if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return; - - // Überprüfen, ob der Benutzer Berechtigungen hat if (!current_user_can('edit_post', $post_id)) return; - - // Überprüfen, ob der Gast-Autor Name gesetzt wurde if (isset($_POST['guest_author'])) { $guest_author = sanitize_text_field($_POST['guest_author']); update_post_meta($post_id, '_guest_author', $guest_author); @@ -3523,10 +3519,8 @@ function wp_multi_display_guest_author($author_name) { if ((is_single() || is_archive() || is_home()) && !is_admin()) { $post = get_post(); if ($post) { - // Wenn der Beitrag einen Gast-Autor hat, diesen verwenden $guest_author = get_post_meta($post->ID, '_guest_author', true); if (!empty($guest_author)) { - // Ersetze den Standard-Autor mit dem Gast-Autor $author_name = $guest_author; } } @@ -3544,15 +3538,10 @@ function wp_multi_add_guest_author_column($columns) { } add_filter('manage_posts_columns', 'wp_multi_add_guest_author_column'); -// Inhalt der Gast-Autor-Spalte function wp_multi_display_guest_author_column($column_name, $post_id) { if ($column_name == 'guest_author') { $guest_author = get_post_meta($post_id, '_guest_author', true); - if (!empty($guest_author)) { - echo esc_html($guest_author); - } else { - echo __('Kein Gast-Autor', 'wp-multi'); - } + echo !empty($guest_author) ? esc_html($guest_author) : __('Kein Gast-Autor', 'wp-multi'); } } add_action('manage_posts_custom_column', 'wp_multi_display_guest_author_column', 10, 2); @@ -3570,43 +3559,67 @@ function wp_multi_add_guest_author_page() { } add_action('admin_menu', 'wp_multi_add_guest_author_page'); - // Callback-Funktion für die Gast-Autor-Übersicht function wp_multi_guest_author_overview_page() { + // Sortierparameter aus URL lesen + $orderby = isset($_GET['orderby']) ? sanitize_key($_GET['orderby']) : 'guest_author'; + $order = isset($_GET['order']) && in_array(strtoupper($_GET['order']), ['ASC', 'DESC']) ? strtoupper($_GET['order']) : 'ASC'; + + // Gültige Sortierfelder + $valid_orderby = ['guest_author' => 'pm.meta_value', 'posts' => 'post_count']; + $sql_orderby = isset($valid_orderby[$orderby]) ? $valid_orderby[$orderby] : 'pm.meta_value'; + $sql_order = $order; + + // Basis-URL für Sortier-Links + $base_url = add_query_arg(['page' => 'guest_author_overview'], admin_url('users.php')); + ?>

- - + + get_results("SELECT DISTINCT pm.meta_value AS guest_author - FROM {$wpdb->posts} p - LEFT JOIN {$wpdb->postmeta} pm ON p.ID = pm.post_id - WHERE pm.meta_key = '_guest_author' AND p.post_status = 'publish' - ORDER BY guest_author ASC"); + $query = " + SELECT pm.meta_value AS guest_author, COUNT(*) AS post_count + FROM {$wpdb->posts} p + INNER JOIN {$wpdb->postmeta} pm ON p.ID = pm.post_id + WHERE pm.meta_key = '_guest_author' + AND pm.meta_value != '' + AND p.post_status = 'publish' + GROUP BY pm.meta_value + ORDER BY {$sql_orderby} {$sql_order} + "; + $guest_authors = $wpdb->get_results($query); + + - // Alle Gast-Autoren anzeigen if ($guest_authors) { foreach ($guest_authors as $author) { - // Anzahl der Beiträge für den Gast-Autor zählen - $author_posts = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) - FROM {$wpdb->posts} p - LEFT JOIN {$wpdb->postmeta} pm ON p.ID = pm.post_id - WHERE pm.meta_key = '_guest_author' - AND pm.meta_value = %s - AND p.post_status = 'publish'", $author->guest_author)); ?> - + - .wrap h1 { - font-size: 24px; - margin-bottom: 20px; - } - .wrap { - background-color: #fff; - padding: 20px; - border-radius: 8px; - box-shadow: 0 2px 5px rgba(0,0,0,0.1); - } - $page_title, + 'post_name' => $page_slug, + 'post_content' => '[guest_author_posts]', + 'post_status' => 'publish', + 'post_type' => 'page', + )); + + if ($page_id && !is_wp_error($page_id)) { + update_option('wp_multi_guest_author_page_id', $page_id); + } + } else { + update_option('wp_multi_guest_author_page_id', $page->ID); + } +} +add_action('init', 'wp_multi_create_guest_author_page'); + +// Shortcode für Gastautoren-Liste +function wp_multi_guest_author_shortcode() { + ob_start(); + global $wpdb; + + // Alle Gastautoren mit Beitragsanzahl abrufen + $query = " + SELECT pm.meta_value AS guest_author, COUNT(*) AS post_count + FROM {$wpdb->posts} p + INNER JOIN {$wpdb->postmeta} pm ON p.ID = pm.post_id + WHERE pm.meta_key = '_guest_author' + AND pm.meta_value != '' + AND p.post_status = 'publish' + GROUP BY pm.meta_value + ORDER BY pm.meta_value ASC + "; + $guest_authors = $wpdb->get_results($query); + + // URL der Gastautoren-Beitragsseite + $guest_author_page_id = get_option('wp_multi_guest_author_page_id'); + $guest_author_page_url = $guest_author_page_id ? get_permalink($guest_author_page_id) : '#'; + + ?> +
+ + +
+ + + + +
+

+ +

+
+ Debug: Kategorie mit Slug "series" wurde nicht gefunden. Bitte überprüfe den Kategorie-Slug.

'; + } + + $args = array( + 'post_type' => ['post', 'page', 'dein_custom_post_type'], + 'post_status' => 'publish', + 'meta_query' => array( + array( + 'key' => '_guest_author', + 'value' => $guest_author, + 'compare' => '=' + ) + ), + 'tax_query' => array( + array( + 'taxonomy' => 'category', + 'field' => 'slug', + 'terms' => 'series', + 'operator' => 'NOT IN' + ) + ), + 'posts_per_page' => -1 + ); + + $query = new WP_Query($args); + + + + if ($query->have_posts()) { + while ($query->have_posts()) { + $query->the_post(); + // Beitragsinhalt abrufen und kürzen + $content = get_the_content(); + $content = wp_strip_all_tags($content); // HTML-Tags entfernen + $trimmed_content = wp_trim_words($content, 30, '...'); + ?> +
+

+ +

+

+
+ +

+ +

+ +
+
+ + + +
+ + + + + + + + + + + + + +
guest_author); ?>post_count); ?>