wordpress-plugin manus v1
This commit is contained in:
parent
b6d64972a2
commit
fdcc714dea
458 changed files with 4939 additions and 35448 deletions
342
markdown-parser-wp.php
Normal file
342
markdown-parser-wp.php
Normal file
|
|
@ -0,0 +1,342 @@
|
|||
<?php
|
||||
/**
|
||||
* Plugin Name: Markdown Parser WP
|
||||
* Plugin URI: https://example.com/markdown-parser-wp
|
||||
* Description: Ein WordPress-Plugin zum Extrahieren von YAML-Metadaten aus Markdown-Dateien, Konvertieren in JSON und Erstellen von WordPress-Beiträgen mit Gutenberg-Blöcken.
|
||||
* Version: 1.1.0
|
||||
* Author: Manus
|
||||
* Author URI: https://example.com
|
||||
* License: GPL-2.0+
|
||||
* License URI: http://www.gnu.org/licenses/gpl-2.0.txt
|
||||
* Text Domain: markdown-parser-wp
|
||||
*/
|
||||
|
||||
// Wenn direkt aufgerufen, abbrechen
|
||||
if (!defined('WPINC')) {
|
||||
die;
|
||||
}
|
||||
|
||||
// Plugin-Konstanten definieren
|
||||
define('MARKDOWN_PARSER_WP_FILE', __FILE__);
|
||||
define('MARKDOWN_PARSER_WP_VERSION', '1.1.0');
|
||||
define('MARKDOWN_PARSER_WP_PATH', plugin_dir_path(__FILE__));
|
||||
define('MARKDOWN_PARSER_WP_URL', plugin_dir_url(__FILE__));
|
||||
|
||||
// Composer-Autoloader laden
|
||||
require_once plugin_dir_path(__FILE__) . 'vendor/autoload.php';
|
||||
|
||||
// Plugin-Klasse definieren
|
||||
class Markdown_Parser_WP {
|
||||
|
||||
/**
|
||||
* Plugin-Instanz
|
||||
*/
|
||||
private static $instance = null;
|
||||
|
||||
/**
|
||||
* Plugin-Version
|
||||
*/
|
||||
const VERSION = '1.1.0';
|
||||
|
||||
/**
|
||||
* Singleton-Pattern: Instanz zurückgeben oder erstellen
|
||||
*/
|
||||
public static function get_instance() {
|
||||
if (null === self::$instance) {
|
||||
self::$instance = new self();
|
||||
}
|
||||
return self::$instance;
|
||||
}
|
||||
|
||||
/**
|
||||
* Konstruktor
|
||||
*/
|
||||
private function __construct() {
|
||||
// Admin-Menü hinzufügen
|
||||
add_action('admin_menu', array($this, 'add_admin_menu'));
|
||||
|
||||
// Admin-Assets laden
|
||||
add_action('admin_enqueue_scripts', array($this, 'enqueue_admin_scripts'));
|
||||
|
||||
// Frontend-Assets laden
|
||||
add_action('wp_enqueue_scripts', array($this, 'enqueue_frontend_scripts'));
|
||||
|
||||
// Admin-Klasse initialisieren
|
||||
\MarkdownParserWP\Admin::init();
|
||||
|
||||
// Shortcodes initialisieren
|
||||
\MarkdownParserWP\Shortcodes::init();
|
||||
|
||||
// Plugin aktivieren
|
||||
register_activation_hook(__FILE__, array($this, 'activate'));
|
||||
|
||||
// Plugin deaktivieren
|
||||
register_deactivation_hook(__FILE__, array($this, 'deactivate'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Plugin aktivieren
|
||||
*/
|
||||
public function activate() {
|
||||
// Composer-Abhängigkeiten prüfen
|
||||
$this->check_dependencies();
|
||||
|
||||
// Upload-Verzeichnis erstellen
|
||||
$upload_dir = wp_upload_dir();
|
||||
$plugin_upload_dir = $upload_dir['basedir'] . '/markdown-parser-wp';
|
||||
|
||||
if (!file_exists($plugin_upload_dir)) {
|
||||
wp_mkdir_p($plugin_upload_dir);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Plugin deaktivieren
|
||||
*/
|
||||
public function deactivate() {
|
||||
// Nichts zu tun
|
||||
}
|
||||
|
||||
/**
|
||||
* Abhängigkeiten prüfen
|
||||
*/
|
||||
private function check_dependencies() {
|
||||
// Prüfen, ob Composer-Autoloader existiert
|
||||
if (!file_exists(plugin_dir_path(__FILE__) . 'vendor/autoload.php')) {
|
||||
add_action('admin_notices', function() {
|
||||
echo '<div class="error"><p>';
|
||||
echo 'Markdown Parser WP benötigt Composer-Abhängigkeiten. Bitte führe <code>composer install</code> im Plugin-Verzeichnis aus.';
|
||||
echo '</p></div>';
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Admin-Menü hinzufügen
|
||||
*/
|
||||
public function add_admin_menu() {
|
||||
add_menu_page(
|
||||
__('Markdown Parser', 'markdown-parser-wp'),
|
||||
__('Markdown Parser', 'markdown-parser-wp'),
|
||||
'manage_options',
|
||||
'markdown-parser-wp',
|
||||
array($this, 'render_admin_page'),
|
||||
'dashicons-media-text',
|
||||
100
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Admin-Skripte und Styles laden
|
||||
*/
|
||||
public function enqueue_admin_scripts($hook) {
|
||||
if ('toplevel_page_markdown-parser-wp' !== $hook) {
|
||||
return;
|
||||
}
|
||||
|
||||
// CSS laden
|
||||
wp_enqueue_style(
|
||||
'markdown-parser-wp-admin',
|
||||
plugin_dir_url(__FILE__) . 'assets/css/admin.css',
|
||||
array(),
|
||||
self::VERSION
|
||||
);
|
||||
|
||||
// JavaScript laden
|
||||
wp_enqueue_script(
|
||||
'markdown-parser-wp-admin',
|
||||
plugin_dir_url(__FILE__) . 'assets/js/admin.js',
|
||||
array('jquery'),
|
||||
self::VERSION,
|
||||
true
|
||||
);
|
||||
|
||||
// AJAX-URL für JavaScript bereitstellen
|
||||
wp_localize_script(
|
||||
'markdown-parser-wp-admin',
|
||||
'markdownParserWp',
|
||||
array(
|
||||
'ajaxUrl' => admin_url('admin-ajax.php'),
|
||||
'nonce' => wp_create_nonce('markdown_parser_wp_nonce')
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Frontend-Skripte und Styles laden
|
||||
*/
|
||||
public function enqueue_frontend_scripts() {
|
||||
// CSS für Frontend-Shortcode-Ausgabe laden
|
||||
wp_enqueue_style(
|
||||
'markdown-parser-wp-frontend',
|
||||
plugin_dir_url(__FILE__) . 'assets/css/frontend.css',
|
||||
array(),
|
||||
self::VERSION
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Admin-Seite rendern
|
||||
*/
|
||||
public function render_admin_page() {
|
||||
// Kategorien für Dropdown holen
|
||||
$categories = get_categories(array(
|
||||
'hide_empty' => false,
|
||||
'orderby' => 'name',
|
||||
'order' => 'ASC'
|
||||
));
|
||||
|
||||
// Post-Typen für Dropdown holen
|
||||
$post_types = get_post_types(array(
|
||||
'public' => true
|
||||
), 'objects');
|
||||
|
||||
?>
|
||||
<div class="wrap">
|
||||
<h1><?php echo esc_html(get_admin_page_title()); ?></h1>
|
||||
|
||||
<div class="card">
|
||||
<h2><?php _e('Markdown-Datei parsen', 'markdown-parser-wp'); ?></h2>
|
||||
|
||||
<form id="markdown-parser-form">
|
||||
<table class="form-table">
|
||||
<tr>
|
||||
<th scope="row">
|
||||
<label for="markdown-url"><?php _e('Markdown-URL', 'markdown-parser-wp'); ?></label>
|
||||
</th>
|
||||
<td>
|
||||
<input type="url" id="markdown-url" name="markdown-url" class="regular-text"
|
||||
placeholder="https://example.com/file.md"
|
||||
value="https://git.rpi-virtuell.de/Comenius-Institut/FOERBICO/raw/branch/main/Website/content/posts/2025-03-20-Workshop-KlimaOER/index.md">
|
||||
<p class="description">
|
||||
<?php _e('URL zu einer Markdown-Datei mit YAML-Frontmatter', 'markdown-parser-wp'); ?>
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<p class="submit">
|
||||
<button type="submit" id="parse-markdown-button" class="button button-primary">
|
||||
<?php _e('Markdown parsen', 'markdown-parser-wp'); ?>
|
||||
</button>
|
||||
</p>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div id="parsing-results" style="display: none;">
|
||||
<div class="card">
|
||||
<h2><?php _e('JSON-Metadaten', 'markdown-parser-wp'); ?></h2>
|
||||
<div class="inside">
|
||||
<pre id="json-output"></pre>
|
||||
<p>
|
||||
<button id="copy-json-button" class="button">
|
||||
<?php _e('JSON kopieren', 'markdown-parser-wp'); ?>
|
||||
</button>
|
||||
<button id="download-json-button" class="button">
|
||||
<?php _e('JSON herunterladen', 'markdown-parser-wp'); ?>
|
||||
</button>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h2><?php _e('Markdown-Inhalt', 'markdown-parser-wp'); ?></h2>
|
||||
<div class="inside">
|
||||
<pre id="markdown-output"></pre>
|
||||
<p>
|
||||
<button id="copy-markdown-button" class="button">
|
||||
<?php _e('Markdown kopieren', 'markdown-parser-wp'); ?>
|
||||
</button>
|
||||
<button id="download-markdown-button" class="button">
|
||||
<?php _e('Markdown herunterladen', 'markdown-parser-wp'); ?>
|
||||
</button>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="post-creation-options" class="card">
|
||||
<h2><?php _e('WordPress-Beitrag erstellen', 'markdown-parser-wp'); ?></h2>
|
||||
<div class="inside">
|
||||
<p><?php _e('Erstelle einen WordPress-Beitrag aus den geparsten Daten:', 'markdown-parser-wp'); ?></p>
|
||||
|
||||
<form id="create-post-form">
|
||||
<input type="hidden" id="markdown-url-hidden" name="markdown-url-hidden" value="">
|
||||
|
||||
<table class="form-table">
|
||||
<tr>
|
||||
<th scope="row">
|
||||
<label for="post-type"><?php _e('Beitragstyp', 'markdown-parser-wp'); ?></label>
|
||||
</th>
|
||||
<td>
|
||||
<select id="post-type" name="post-type">
|
||||
<?php foreach ($post_types as $post_type): ?>
|
||||
<option value="<?php echo esc_attr($post_type->name); ?>">
|
||||
<?php echo esc_html($post_type->labels->singular_name); ?>
|
||||
</option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">
|
||||
<label for="post-status"><?php _e('Status', 'markdown-parser-wp'); ?></label>
|
||||
</th>
|
||||
<td>
|
||||
<select id="post-status" name="post-status">
|
||||
<option value="draft"><?php _e('Entwurf', 'markdown-parser-wp'); ?></option>
|
||||
<option value="publish"><?php _e('Veröffentlicht', 'markdown-parser-wp'); ?></option>
|
||||
<option value="pending"><?php _e('Ausstehender Review', 'markdown-parser-wp'); ?></option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">
|
||||
<label for="category-id"><?php _e('Kategorie', 'markdown-parser-wp'); ?></label>
|
||||
</th>
|
||||
<td>
|
||||
<select id="category-id" name="category-id">
|
||||
<option value="0"><?php _e('Keine Kategorie', 'markdown-parser-wp'); ?></option>
|
||||
<?php foreach ($categories as $category): ?>
|
||||
<option value="<?php echo esc_attr($category->term_id); ?>">
|
||||
<?php echo esc_html($category->name); ?>
|
||||
</option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">
|
||||
<label for="import-images"><?php _e('Bilder importieren', 'markdown-parser-wp'); ?></label>
|
||||
</th>
|
||||
<td>
|
||||
<input type="checkbox" id="import-images" name="import-images" checked>
|
||||
<span class="description">
|
||||
<?php _e('Bilder in die WordPress-Mediathek importieren', 'markdown-parser-wp'); ?>
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<p class="submit">
|
||||
<button type="submit" id="create-post-button" class="button button-primary">
|
||||
<?php _e('Beitrag erstellen', 'markdown-parser-wp'); ?>
|
||||
</button>
|
||||
</p>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="result-message" class="notice" style="display: none;"></div>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
|
||||
// Plugin initialisieren
|
||||
function markdown_parser_wp_init() {
|
||||
return Markdown_Parser_WP::get_instance();
|
||||
}
|
||||
|
||||
// Plugin starten
|
||||
markdown_parser_wp_init();
|
||||
Loading…
Add table
Add a link
Reference in a new issue