wp-multi-kategorie.php aktualisiert

This commit is contained in:
M_Viper 2025-04-10 17:55:05 +00:00
parent f69090f168
commit e37fd6278a

View File

@ -1,140 +1,275 @@
<?php
/*
* Plugin Name: WP Multi Kategorie
* Plugin URI: https://git.viper.ipv64.net/M_Viper/wp-multi-kategorie
* Description: Blende einzelne Kategorien aus verschiedenen Bereichen deiner Website (Startseite, Feeds, Archive, Suche) aus. Teil der WP Multi-Reihe.
* Version: 1.0.0
* Author: M_Viper
* Author URI: https://m-viper.de
* Requires at least: 6.7.2
* Tested up to: 6.7.2
* License: GPLv2 or later
* License URI: https://www.gnu.org/licenses/gpl-2.0.html
*/
defined('ABSPATH') or die('Kein direkter Zugriff erlaubt.');
// Admin-Menü und Filter
add_action('admin_menu', 'wpmkategorie_admin_menu');
add_filter('pre_get_posts', 'wpmkategorie_exclude_categories');
// Admin-Menü unter "Beiträge"
function wpmkategorie_admin_menu() {
add_submenu_page(
'edit.php', // Elternmenü: "Beiträge"
'WP Multi Kategorie', // Seitentitel
'Kategorie-Filter', // Menüpunkt-Name
'manage_options', // Berechtigung
'wp-multi-kategorie', // Slug
'wpmkategorie_options_page' // Callback-Funktion
);
}
// Optionsseite
function wpmkategorie_options_page() {
if (isset($_POST['wpmkategorie'])) {
check_admin_referer('wpmkategorie_form');
$message = wpmkategorie_process();
}
$options = wpmkategorie_get_options();
?>
<div class="wrap">
<h1>WP Multi Kategorie</h1>
<?php if (isset($message)) { echo $message; } ?>
<p>Wähle Kategorien aus, die du aus bestimmten Bereichen deiner Website ausblenden möchtest.</p>
<form action="" method="post">
<?php wp_nonce_field('wpmkategorie_form'); ?>
<table class="widefat fixed">
<thead>
<tr>
<th>Kategorie</th>
<th>Startseite ausblenden?</th>
<th>Feeds ausblenden?</th>
<th>Archive ausblenden?</th>
<th>Suche ausblenden?</th>
</tr>
</thead>
<tbody>
<?php
$categories = get_categories(array('hide_empty' => 0, 'order' => 'ASC'));
$alt = 0;
foreach ($categories as $cat) :
$alt_class = ($alt++ % 2) ? ' class="alternate"' : '';
?>
<tr<?php echo $alt_class; ?>>
<td><?php echo esc_html($cat->cat_name); ?></td>
<td><input type="checkbox" name="exclude_main[]" value="<?php echo $cat->cat_ID; ?>" <?php checked(in_array($cat->cat_ID, $options['exclude_main'])); ?> /></td>
<td><input type="checkbox" name="exclude_feed[]" value="<?php echo $cat->cat_ID; ?>" <?php checked(in_array($cat->cat_ID, $options['exclude_feed'])); ?> /></td>
<td><input type="checkbox" name="exclude_archives[]" value="<?php echo $cat->cat_ID; ?>" <?php checked(in_array($cat->cat_ID, $options['exclude_archives'])); ?> /></td>
<td><input type="checkbox" name="exclude_search[]" value="<?php echo $cat->cat_ID; ?>" <?php checked(in_array($cat->cat_ID, $options['exclude_search'])); ?> /></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<p class="submit">
<input type="submit" name="wpmkategorie" class="button button-primary" value="Aktualisieren" />
</p>
</form>
</div>
<?php
}
// Verarbeitung der Formulardaten
function wpmkategorie_process() {
$options = array(
'exclude_main' => isset($_POST['exclude_main']) ? array_map('intval', $_POST['exclude_main']) : array(),
'exclude_feed' => isset($_POST['exclude_feed']) ? array_map('intval', $_POST['exclude_feed']) : array(),
'exclude_archives' => isset($_POST['exclude_archives']) ? array_map('intval', $_POST['exclude_archives']) : array(),
'exclude_search' => isset($_POST['exclude_search']) ? array_map('intval', $_POST['exclude_search']) : array()
);
update_option('wpmkategorie_exclusions', $options);
return '<div class="notice notice-success is-dismissible"><p>Einstellungen erfolgreich aktualisiert.</p></div>';
}
// Optionen abrufen
function wpmkategorie_get_options() {
$defaults = array(
'exclude_main' => array(),
'exclude_feed' => array(),
'exclude_archives' => array(),
'exclude_search' => array()
);
$options = get_option('wpmkategorie_exclusions', $defaults);
if (!is_array($options)) {
$options = $defaults;
update_option('wpmkategorie_exclusions', $options);
}
return $options;
}
// Kategorien ausblenden
function wpmkategorie_exclude_categories($query) {
if (!is_admin() && $query->is_main_query()) {
$options = wpmkategorie_get_options();
if ($query->is_home() && !empty($options['exclude_main'])) {
$query->set('category__not_in', $options['exclude_main']);
}
if ($query->is_feed() && !empty($options['exclude_feed'])) {
$query->set('category__not_in', $options['exclude_feed']);
}
if ($query->is_archive() && !empty($options['exclude_archives'])) {
$query->set('category__not_in', $options['exclude_archives']);
}
if ($query->is_search() && !empty($options['exclude_search'])) {
$query->set('category__not_in', $options['exclude_search']);
}
}
return $query;
}
// Deinstallation
function wpmkategorie_uninstall() {
delete_option('wpmkategorie_exclusions');
}
register_uninstall_hook(__FILE__, 'wpmkategorie_uninstall');
<?php
/*
* Plugin Name: WP Multi Kategorie
* Plugin URI: https://git.viper.ipv64.net/M_Viper/WP-Multi-Kategorie
* Description: Blende einzelne Kategorien aus verschiedenen Bereichen deiner Website (Startseite, Feeds, Archive, Suche) aus. Teil der WP Multi-Reihe.
* Version: 1.1
* Author: M_Viper
* Author URI: https://m-viper.de
* Requires at least: 6.7.2
* Tested up to: 6.7.2
* License: GPLv2 or later
* License URI: https://www.gnu.org/licenses/gpl-2.0.html
*/
defined('ABSPATH') or die('Kein direkter Zugriff erlaubt.');
/*
* WP Multi Toolkit Prüfung
*/
// Funktion zur Überprüfung des WP Multi Toolkit Plugins
function wp_multi_kategorie_check_dependency() {
if (!function_exists('is_plugin_active')) {
include_once(ABSPATH . 'wp-admin/includes/plugin.php');
}
// Prüft, ob WP Multi Toolkit installiert und aktiv ist
if (!is_plugin_active('wp-multi-toolkit/wp-multi-toolkit.php')) {
add_action('admin_notices', 'wp_multi_kategorie_dependency_notice');
return false;
}
return true;
}
// Fehlermeldung für Admin-Bereich mit Download-Button
function wp_multi_kategorie_dependency_notice() {
?>
<div class="notice notice-error">
<p>
<?php _e('Das Plugin "WP Multi Kategorie" benötigt "WP Multi Toolkit", um zu funktionieren. Bitte installieren und aktivieren Sie "WP Multi Toolkit".', 'wp-multi-kategorie'); ?>
<a href="https://git.viper.ipv64.net/M_Viper/wp-multi-toolkit/releases" target="_blank" class="button button-primary" style="margin-left: 10px;">
<?php _e('WP Multi Toolkit herunterladen', 'wp-multi-kategorie'); ?>
</a>
</p>
</div>
<?php
}
// Plugin nur initialisieren, wenn Abhängigkeit erfüllt ist
if (wp_multi_kategorie_check_dependency()) {
// Hier würde der restliche Plugin-Code folgen
} else {
// Optional: Plugin komplett deaktivieren, wenn Abhängigkeit fehlt
add_action('admin_init', function() {
deactivate_plugins(plugin_basename(__FILE__));
});
}
// Admin-Menü und Filter
add_action('admin_menu', 'wpmkategorie_admin_menu');
add_filter('pre_get_posts', 'wpmkategorie_exclude_categories');
// Admin-Menü unter "Beiträge"
function wpmkategorie_admin_menu() {
add_submenu_page(
'edit.php', // Elternmenü: "Beiträge"
'WP Multi Kategorie', // Seitentitel
'Kategorie-Filter', // Menüpunkt-Name
'manage_options', // Berechtigung
'wp-multi-kategorie', // Slug
'wpmkategorie_options_page' // Callback-Funktion
);
}
// CSS für modernes Design
function wpmkategorie_enqueue_styles() {
echo '<style>
.wrap {
background-color: #f9f9f9;
padding: 20px;
border-radius: 8px;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
}
h1 {
font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
font-size: 1.8rem;
color: #333;
margin-bottom: 20px;
}
.button {
background-color: #0073aa;
color: white;
border: none;
padding: 8px 15px;
border-radius: 5px;
cursor: pointer;
font-size: 14px;
}
.button-primary {
background-color: #00a0d2;
}
.button:hover {
background-color: #006e8a;
}
.widefat th, .widefat td {
padding: 12px;
text-align: center;
font-size: 14px;
border-bottom: 1px solid #ddd;
}
.widefat tr.alternate {
background-color: #f1f1f1;
}
.submit {
margin-top: 20px;
}
.notice-success, .notice-error {
font-size: 16px;
background-color: #e7f9e7;
border: 1px solid #6ecf6e;
padding: 15px;
margin-bottom: 20px;
border-radius: 5px;
}
.notice-error {
background-color: #fbe9e9;
border-color: #f57c7c;
}
.wp-multi-kategorie-form input[type="checkbox"] {
width: 18px;
height: 18px;
margin: 0;
}
/* Banner mit Blauem Hintergrund und Logo zentriert */
.wp-multi-kategorie-banner {
background-color: #0073aa; /* Blaues Banner */
color: white;
height: 150px;
display: flex;
justify-content: center;
align-items: center;
margin-bottom: 20px;
}
.wp-multi-kategorie-banner img {
max-height: 100px;
max-width: 100%;
object-fit: contain;
}
</style>';
}
add_action('admin_head', 'wpmkategorie_enqueue_styles');
// Optionsseite mit modernem Design
function wpmkategorie_options_page() {
if (isset($_POST['wpmkategorie'])) {
check_admin_referer('wpmkategorie_form');
$message = wpmkategorie_process();
}
$options = wpmkategorie_get_options();
?>
<div class="wrap">
<div class="wp-multi-kategorie-banner">
<img src="https://m-viper.de/img/logo.png" alt="Logo"> <!-- Logo im Banner zentriert -->
</div>
<h1>WP Multi Kategorie</h1>
<?php if (isset($message)) { echo $message; } ?>
<p>Wähle Kategorien aus, die du aus bestimmten Bereichen deiner Website ausblenden möchtest.</p>
<form action="" method="post" class="wp-multi-kategorie-form">
<?php wp_nonce_field('wpmkategorie_form'); ?>
<table class="widefat fixed">
<thead>
<tr>
<th>Kategorie</th>
<th>Startseite</th>
<th>Feeds</th>
<th>Archive</th>
<th>Suche</th>
</tr>
</thead>
<tbody>
<?php
$categories = get_categories(array('hide_empty' => 0, 'order' => 'ASC'));
$alt = 0;
foreach ($categories as $cat) :
$alt_class = ($alt++ % 2) ? ' class="alternate"' : '';
?>
<tr<?php echo $alt_class; ?>>
<td><?php echo esc_html($cat->cat_name); ?></td>
<td><input type="checkbox" name="exclude_main[]" value="<?php echo $cat->cat_ID; ?>" <?php checked(in_array($cat->cat_ID, $options['exclude_main'])); ?> /></td>
<td><input type="checkbox" name="exclude_feed[]" value="<?php echo $cat->cat_ID; ?>" <?php checked(in_array($cat->cat_ID, $options['exclude_feed'])); ?> /></td>
<td><input type="checkbox" name="exclude_archives[]" value="<?php echo $cat->cat_ID; ?>" <?php checked(in_array($cat->cat_ID, $options['exclude_archives'])); ?> /></td>
<td><input type="checkbox" name="exclude_search[]" value="<?php echo $cat->cat_ID; ?>" <?php checked(in_array($cat->cat_ID, $options['exclude_search'])); ?> /></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<p class="submit">
<input type="submit" name="wpmkategorie" class="button button-primary" value="Einstellungen speichern" />
</p>
</form>
</div>
<?php
}
// Verarbeitung der Formulardaten
function wpmkategorie_process() {
$options = array(
'exclude_main' => isset($_POST['exclude_main']) ? array_map('intval', $_POST['exclude_main']) : array(),
'exclude_feed' => isset($_POST['exclude_feed']) ? array_map('intval', $_POST['exclude_feed']) : array(),
'exclude_archives' => isset($_POST['exclude_archives']) ? array_map('intval', $_POST['exclude_archives']) : array(),
'exclude_search' => isset($_POST['exclude_search']) ? array_map('intval', $_POST['exclude_search']) : array()
);
update_option('wpmkategorie_exclusions', $options);
return '<div class="notice notice-success is-dismissible"><p>Die Einstellungen wurden erfolgreich gespeichert.</p></div>';
}
// Optionen abrufen
function wpmkategorie_get_options() {
$defaults = array(
'exclude_main' => array(),
'exclude_feed' => array(),
'exclude_archives' => array(),
'exclude_search' => array()
);
$options = get_option('wpmkategorie_exclusions', $defaults);
if (!is_array($options)) {
$options = $defaults;
update_option('wpmkategorie_exclusions', $options);
}
return $options;
}
// Kategorien ausblenden
function wpmkategorie_exclude_categories($query) {
if (!is_admin() && $query->is_main_query()) {
$options = wpmkategorie_get_options();
if ($query->is_home() && !empty($options['exclude_main'])) {
$query->set('category__not_in', $options['exclude_main']);
}
if ($query->is_feed() && !empty($options['exclude_feed'])) {
$query->set('category__not_in', $options['exclude_feed']);
}
if ($query->is_archive() && !empty($options['exclude_archives'])) {
$query->set('category__not_in', $options['exclude_archives']);
}
if ($query->is_search() && !empty($options['exclude_search'])) {
$query->set('category__not_in', $options['exclude_search']);
}
}
return $query;
}
// Deinstallation
function wpmkategorie_uninstall() {
delete_option('wpmkategorie_exclusions');
}
register_uninstall_hook(__FILE__, 'wpmkategorie_uninstall');