Archiv der Kategorie: WordPress

Duplicator Installation auf Linux Mint: Rechte anpassen

Wer mit WordPress zu tun hat, kriegt es früher oder später mit der Problematik zu tun: wie ziehe ich einen Blog um?

Eine viel benutzte und praktische Lösung ist der Duplicator, den erkläre ich aber jetzt nicht näher, das kann sich jeder selber anlesen, der ist bestens dokumentiert.

Na ja, jeden falls habe ich ein Duplicator-Archiv eines kleineren Blogs erstellt, das sieht so aus:

installer

Das kopiere ich in mein Localhost Home-Verzeichnis und versuche ganz blauäugig, den installer.php auszuführen. Der Installer antwortet natürlich mit einer Fehlermeldung, das Verzeichnis ist schreibgeschützt. Was nun? Da gibt es sicher mehrere Lösungen, mir war die Lösung mit dem Filezilla am sympathischsten, die probiere ich aus.

Den Filezilla kann man sich über die Anwendunsverwaltung flugs installieren, dann gehts los:

FileZilla via SSH (Secure Shell)

To connect FileZilla to

localhost (your own machine) on Linux Mint, you do not need a separate FTP server application like FileZilla Server (which is primarily for Windows). Instead, you should use the built-in SSH (Secure Shell) service, which FileZilla can access using the SFTP protocol.

Installiere SSH:
sudo apt update
sudo apt install openssh-server

Schauen obs lafft:

sudo systemctl status ssh

Notfalls manuell starten:

 sudo systemctl start ssh

Filezilla konfigurieren

  • Open File -> Site Manager.
  • Click New Site and configure the following:
    • Protocol: SFTP – SSH File Transfer Protocol
    • Host: 127.0.0.1 (or localhost)
    • Port: 22
    • Logon Type: Normal
    • User: Your Linux Mint username
    • Password: Your Linux Mint login password

Im rechten Fenster ins Serververzeichnis navigieren (var/www/http/) und das entsprechende Verzeichnis, bei mir ist es „rezepte“, mit der rechten Maustaste anklicken. Jetzt kann man die benötigten Rechte setzen.rechte

Ich hab bei „Unterverzeichnisse einbeziehen“ ein Häkchen gemacht, weiss nicht ob das wirklich nötig war. Das sollte eigentlich genügen.

Alternativ: Rechte setzen im Terminal

Gehe in das Verzeichnis, in dem die installer.php und das Archiv liegen (z. B. /var/www/html/rezepte)

cd /var/www/html/rezepte

Die beste Methode ist es, den Webserver als Eigentümer der Dateien festzulegen.

sudo chown -R www-data:www-data /var/www/html/rezepte

Verzeichnisse auf 755 setzen

find . -type d -exec chmod 755 {} \;

Dateien auf 644 setzen:

find . -type f -exec chmod 644 {} \;

Jetzt sollte der Installer laufen und die nötigen Dateien und Verzeichnise sowie die Datenbanktabellen anlegen.Nach erfolgreicher Migration solltest du die Rechte wieder auf einen sicheren Stand bringen und die Installationsdateien löschen.

sudo chown -R www-data:www-data /var/www/html
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
# Entfernen der Duplicator-Dateien
rm installer.php *.zip

Aufrufen der Duplicator-Installation

Navigiere im Browser zu deinem WordPress-Verzeichnis und starte die installer.php

Und hier machen wir eine kleine Pause, weil ich dazu eine jungfräuliche Installer-Installation brauche, die ursprünglichen Dateien werden bei erfolgreicher Installation gelöscht. Also kurz Füße vertreten, dann gehts weiter. Dieser Beitrag ist eh schon lang genug.


WordPress Installation auf Linux Mint

Jetzt wirds Zeit für die berühmte 5-Minuten-Installation von WordPress. Ob mir systemseitig noch was fehlt, werde ich im Laufe des Vorgangs schon noch merken, dann muss man nachfassen.

Normalerweise fängt man damit an, dass man sich die neueste WordPress-Version herunterlädt. Ich spare mir diesen Schritt, weil ich ein „ziemlich neues“ WordPress auf der Festplatte ligen hab, das muss es tun. Ich gehe also direkt zu Schritt zwei.

WordPress entpacken und Dateien in das dedizierte WebSerververzeichnis hochladen

Gehts scho los, das Verzeichnis var/www/html ist schreibgeschützt.  Ich öffne es als Administrator, lege ein neues Verzeichni wp_test an und kopiere meine WordPress-Dateien da rein. Dann surfe ich zu localhost/wp_test. Ah, was sehen meine entzückten Augen:

willkommen wp

Jetzt müssen als erstes die Datenbank daten eingetragen werden:

„Kann nicht in die Datei wp-config.php schreiben.

Du kannst die Datei wp-config.php manuell erstellen und den nachfolgenden Text dort einfügen.“

Ah ja. Dann wollen wir uns mal den Text kopieren. Und auf Installieren klicken.

5 minuten

Nach Eingabe der Basisdaten auf OK drücken, und was soll ich sagen, es funktioniert!

wp erster beitrag

Ich hasse übrigens den Block-Editor Gutenberg und nahme immer als erste heilige Handlung die Installation des Classic Edistor Plugins vor, das habe ich mir diesmal geschenkt. Aber einen Beitrag konnte ich auch so verfassen, und das reicht mir als Funktionstest. Also: Hurra, das erste WordPress auf Linux Mint läuft!

sekt

Das hat jetzt erstaunlich reibungslos funktioniert. Ich bin aber noch lange nicht fertig. Wir laufen nämlich auf PHP 8.3, und ich muss auf 8.4 testen. Aber nicht den übernächsten Schritt vor dem nächsten tun, jetzt muss ich erstmal testen, ob das mit dem Duplicator auf meinem LinuxRechner auch funktioniert. Dazu habe ich schon mal ein Backup eines kleineren Blogs durchgeführt. Morgen sehe ich dann, ob ich das lokal zum Laufen kriege.

Back to the Roots: ein lokales WordPress unter Linux, die Voraussetzungen

Die Lernkurve sollte recht steil sein, was ich bislang an Doku zum Thema gelesen habe, erfordert doch einiges an Linux-Kenntnissen, die ich nicht habe. Ich frett mich aber schon durch, wär doch gelacht!

Esrtmal machen wir eine Bestandsaufnahme. Wenn mans sauber macht, legt man für sowas ein Betriebshandbuch an, ich dokumentiere meinen Kram lokal in meinem WordPress-Arbeitsverzeichnis, und hier im Blog.

Webserver

Apache2. install über die Anwendungsverwaltung.

Starten: sudo systemctl start apache2

Funktional? sudo systemctl status apache2

Test: Aufruf von localhost im Browser, sollte die Apache Default Page bringen.

apachedefaultpage

Falls die Seite nicht angezeigt wird, prüfen ob man http://localhost sauber eingegeben hat, der Browser macht gern ein https draus. Beim ersten Aufruf kann es auch sein, dass man den Browser erst herzlich bitten muss, eine unsichere Seite anzuzeigen.

PHP (Version)

installieren:

sudo apt install php8.3-cli

Test

eine kleine php-Datei erzeugen, die beispielsweise dies enthält

phpinfo();

Die kommt ins Stammverzeichnis des Webservers, defaullt ist var/www/html (als Admin öffnen)

phpinfo

Wenn der Browser kein PHP interpretiert

Das ist der Fall, wenn beim Aufruf von phpmyadmin der Sourcecode angezeigt wird.
Oft ist PHP installiert, aber das Apache-Modul libapache2-mod-php fehlt.

Lösung: Installieren Sie das Modul und aktivieren Sie es. Öffnen Sie das Terminal und geben Sie ein:

sudo apt update
sudo apt install php libapache2-mod-php
sudo a2enmod php8.x # Ersetzen Sie 8.x durch Ihre installierte Version (z.B. 8.3)
sudo systemctl restart apache2

Datenbank Server

Mysql Server. Install über die Anwendungsverwaltung.

Starten: sudo systemctl start mysql

Funktional? sudo systemctl status mysql.

Konsole Testen:

sudo mysql --user=root mysql

prompt

Konsole beenden mit exit;

phpmyadmin

Install über die Anwendungsverwaltung.

Test: http://localhost/phpmyadmin/ im Browser aufrufen

phpmyadmin

Mit einem Admin-User einloggen, dann kann man gleich testen ob man eine neue Datenbank anlegen kann.

Haben wir alles?

Ich denke schon. Webserver, PHP, Mysql Datenbank, alles klar. Ein FTP-Programm brauchen wir nicht, da wir ja lokal arbeiten. Jetzt gehts gleich los, aber dazu gibt es einen neuen Baitrag.

 

Jetzt brauch ich doch einen lokalen Webserver auf Linux… das übt!

Das zählt unter „Fingerübung“: einmal Install mit HIndernissen

Ich gebe zu, ich dachte erstmal ich mach es mir bequem und nehme den guten alten Xampp. Ich brauche nämlich doch einen lokalen Webserver, auch unter Linux. Warum? Als Testumgebung, weil man manche Sachen tunlichst nicht in der Produktivumgebung ausprobiert. Mein geliebtes Inselfisch-Kochbuch läuft nämlich seit dem vorletzten PHP-Update bei Strato nur noch mit der alten PHP-Version, und das ist erstens nicht schön und kostet zweitens eine monatliche Administrations-Gebühr, was mich anfuchst.

Frisch ans Werk, gegooglet und installiert, Xampp gibts auch für Linux, da heisst er Lampp. Nachdem ich erst dachte dass der Installer sich aufgehängt hat und nach etwas mehr googlen hab ich mich dann in Geduld geübt und den Installer eine halbe Stunde lang stehen lassen, dann ist er durchgelaufen. Und nachdem ich eine vorige nginx-Installation entfernt habe, die den Port 80 besetzte, liess sich auch der Apache starten!

Na wunderbar, aber es nutzt mir so erstmal nix, weil die PHP Version (8.1.25) leider ziemlich veraltet ist. Na ja, ich hätte ja auch beim googlen merken müssen, dass Xampp insgesamt als  veraltet zu werten ist… aber what shalls wie man auf neudeutsch sagt, schließlich sollte es auf Linux auch ohne gehen, Apache und Co sind ja native Linux. Ich geh mal recherchieren und melde mich später wieder.

Neue Anforderung

So, jetzt bin ich wieder da, mit einer etwas genaueren Zieldefinition, die war nämlich nicht ganz sauber. Also nochmal, mit etwas mehr Schmackes:

1. das inselfisch-Kochbuch läuft derzeit mit PHP 8.3.

2. die neueste empfohlene PHP-Version bei Strato ist 8,4

3.  beim testweise umstellen auf 8.4 ist das inselfisch-Kochbuch nicht mehr gestartet, deshalb hab ich auf die alte PHP-Version zurückgestellt und alles gelassen wie es war

4. aus den FAQs bei Strato hab ich beim querlesen entnommen, dass das manuelle testweise umstellen der PHP Version auf dem Server eine eine etwas haarige Angelegenheit ist, die meine Linux-Kanntnisse deutich übersteigt und einiges an Rechereche erfordert, z.B. wie man die .htaccess editiert. Ich habe auch was gelesen dass die manuell umgestellte PHP-Version nur solange gültig bleibt wie die Benutzersession bei Strato nicht beendet wird, aber da muss ich echt nochmal nachlesen. Da sind meine Webserver-Kenntnisse echt nicht gut genug.

Bei genauerer Überlegung stelle ich fest, dass ich eigentlich beide PHP-Versionen auf dem lokalen Webserver brauche, mit der Möglichkeit („on the fly“ wäre optimal) zwischen den Versionen umzuschalten. Ich redefiniere also mein Ziel. Und melde mich wieder ab zur neuen Recherche.

Apache intallieren

Der Webserver Apache lässt sich komfortabel über die Anwendungsverwaltung installieren, suche nach apache2. Gestartet und gestoppt wird er aus der Kommandozeile mit:

sudo service apache2 start

bzw:

sudo service apache2 stop

Zustand abfragen (erfordert Password), überprüfen ob der Server läuft:

sudo systemctl status apache2

Apache neu starten

sudo systemctl restart apache2

PHP Version installieren

sudo apt install php8.3-cli

Wenn der Browser kein PHP interpretiert

Das ist der Fall, wenn beim Aufruf von phpmyadmin der Sourcecode angezeigt wird.
Oft ist PHP installiert, aber das Apache-Modul libapache2-mod-php fehlt.

Lösung: Installieren Sie das Modul und aktivieren Sie es. Öffnen Sie das Terminal und geben Sie ein:

sudo apt update
sudo apt install php libapache2-mod-php
sudo a2enmod php8.x # Ersetzen Sie 8.x durch Ihre installierte Version (z.B. 8.3)
sudo systemctl restart apache2

Wenns das noch immer nicht gewesen war: ein neues jungfräuliches Profil in Firefox wirkt Wunder!

DB-Passwort und User nachträglich hinzufügen

Falls sie bei der Installation von MariaDB kein Passwort für ihren User vergeben haben, müssen sie das noch nachholen

CREATE USER 'dbadmin'@'localhost' IDENTIFIED BY 'meinpasswort';
GRANT ALL PRIVILEGES ON *.* TO 'dbadmin'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;

Dazu muss die Datenbank Console im Terminal als root gestartet werden.

mysql -u root -p

Ein paar wichtige Kommandos:

sudo systemctl start mysql
sudo systemctl status mysql
sudo systemctl stop mysql
sudo systemctl restart mysql

Haben wir jetzt einen funktionalen lokalen Webserver?

Das testen wir bei der nächsten Session. Dann gehts „back to the roots“, wir installieren WordPress, aber diesmal unter Linux. Das wird spannend!

Es geht voran mit dem Stichwortregister-Plugin: aus drei mach zwei

Ich hab mir heute nochmal die Erstellung von Admin-Menüs in WordPress zu Gemüte geführt, und beschlossen aus den drei Plugins zur Erstellung eines Stichwortregisters doch zwei zu machen.  Es sind ja auch getrennte Funktionalitäten, einmal wird die Stichwortliste als CSV aus der wp_posts erstellt, eine Ausgabeseite angelegt und in die wp_options eingetragen, und der Shortcode erzeugt, und zum zweiten wird die Negativliste gepflegt. Ausserdem bräuchte ich dann für die Negativliste eine Menütiefe von 3, und da wirds tricky, das kann WordPress nicht so ohne weiteres.

Man könnte die CSV-Datei, die Ausgabeseite und die Tabelle für die Negativliste auch bei Aktivierung des entsprechenden Plugins automatisch erzeugen, aber irgendwie ist es mir sympathischer, das manuell anzustossen. Muss man halt eine recht ausführliche Anleitung mitliefern, aber das krieg ich auch noch gebacken 😉

Jetzt erst mal weiter mit dem Plugin-Zusammenfassen. Läuft ganz gut, ich hab wohl recht sauber programmiert, Morgen mehr!

Update: Das war ja einfach. Ich habe ein schönes Tutorial bei Honar Systems für die Erstellung von WordPress Admin Pages mit Sub Pages gefunden, damit war die Hauptarbeit schon erledigt. Es gibt jetzt einen Menüeintrag „Stichwortregister“ mit zwei Untermenüs „Konfiguration“ und „CSV Datei“. Es gibt des weiteren einen eigenen Menüpunkt „Negativliste bearbeiten“. Hier mal nur ein kurzes Snippet für die Erzeugung der Menüs:

 function stichwortregister_admin_menu() {
add_menu_page(
__( 'Stichwortregister', 'de_DE' ),
__( 'Stichwortregister', 'de_DE' ),
'manage_options',
'stichwort-page',
'stichwortregister_admin_page_contents',
'dashicons-plugins-checked',
3
);
add_submenu_page( 'stichwort-page',
__( 'Stichwortregister', 'de_DE' ),
__( 'CSV-Datei', 'de_DE' ),
'manage_options',
'stichwort-page-sub-menu-csv',
'stichwortregister_sub_menu_admin_page_csv_contents');

add_submenu_page( 'stichwort-page',
__( 'Stichwortregister', 'de_DE' ),
__( 'Konfiguration', 'de_DE' ),
'manage_options',
'stichwort-page-sub-menu',
'stichwortregister_sub_menu_admin_page_contents');


}
add_action( 'admin_menu', 'stichwortregister_admin_menu' );

Die Funktionalitäten haben sich nicht geändert, ich hab sie nur ein bisschen anders einsortiert. Lief problemlos, ich hab da echt sauber gearbeitet. So, jetzt muss es aber gut sein. Zwei Plugins für ein Stichwortregister, damit leben wir einfach 😉

Perfektionisten würden jetzt noch die Stichwortliste in eine MySQL Tabelle packen, aber mir gefällt das mit dem CSV eigentlich ganz gut, vielleicht will man die Liste auch mal extern bearbeiten oder ergänzen. Ich lass es jetzt mal so.

Nachtrag: die Negativliste im praktischen Einsatz

Ich war noch die praktische Anwendung der Negativliste für das Stichwortverzeichnis schuldig, die liefere ich jetzt nach. Wir haben ja unsere Negativ-Wörter in der Tabelle negativliste stehen und können sie per Plugin pflegen.

Jetzt kommt ihr Einsatz: ich mach das an der Stelle, wo die Stichwortliste aus der CSV-Datei eingelesen und in ein Array weggeschrieben wird. Also, wir gehen in die Function csv_einlesen(). Und zwar an die Stelle, wo die CSV mit einer While not EOF-Schleife eingelesen wird. In jeder eingelesenen Zeile wird der Flag für die Negativliste erstmal auf 0 gesetzt. Dann geht man mit einem Select in die Tabelle negativliste und prüft, ob das aktuelle Wort enthalten ist, wenn ja wird der Flag auf 1 gesetzt. Dann geht man hin und schreibt das aktuelle Wort nur in das Array, wenn der Flag == 0 ist. Das wars!

$negativ_flag = 0;

//Solange nicht EOF erreicht, 1000 ist die maximale Zeilenlänge
while (($csv_array = fgetcsv ($handle, 1000)) !== FALSE ) {

foreach ($csv_array as $index) {

$negativ_flag = 0;
//mit Negativliste abgleichen
$db_item = $wpdb->get_results(
"SELECT * FROM negativliste WHERE wort LIKE '$index'");

if (count($db_item) > 0){
$negativ_flag=1;
}

//Nur ausgeben wenn das Wort nicht in der Negativliste enthalten ist
if ($negativ_flag == 0){
//Hier kommt der Knackpunkt: Neues Stichwort in Array schreiben
//***********************************
array_push($aktListe, $index);
//***********************************

} //Ende von if negativ_flag == false
}
}

Ich muss sagen, ich bin mit der Funktionalität sehr zufrieden, so kriegt man mit relativ wenig Aufwand doch recht saubere Stichwörter und kann die kleinen Füllwörtchen prima ausblenden. Mein Progrämmchen ist lernfähig, das grenzt schon ein bisschen an KI 🙂

Stichwortregister revisited: aus drei mach eins

Jetzt hab ich drei Plugins, um ein Stichwortregister zu erzeugen, das ist irgendwie nicht so zufriedenstellend, das könnte man sicher auch zusammenfassen.  Ich mach mal ein Brainstorming und schau was dabei rauskommt.

  • Bei Aktivierung des Plugins sollen ein paar Aufgaben erledigt werden: die Tabelle negativliste mit einigen (wenigen) Beispieldaten soll angelegt werden, einige Setup-Informationen sollen in die wp_options geschrieben werden. Das geht wahrscheinlich mit dem
    register_activation_hook( __FILE__, array( $this, 'example_activate' ) );
    
  • die Erstellung der CSV-Datei mit den Stichworten (aus dem Feld post_title erzeugt) soll manuell angestossen werden, damit man hier bessere Kontrolle hat.
  • Der Abgleich mit der Negativliste soll live bei Erstellung des Stichwortregisters erfolgen.
  • Fleißaufgabe: statt der CSV-Datei könnte man auch eine Custom Tabelle hernehmen, aber dabei ist mir der Webserver zu oft abgeraucht, da hab ich keine Lust drauf.

Das wird natürlich ein ewig langer Rattenschwanz, wenn man das alles in ein einziges Plugin packt, da müsste ich gucken ob man den Ablauf nicht besser straffen und verschlanken kann. Mal schauen ob mich die Arbeitswut noch packt… ich zweifle, die Rohfassung läuft ja ganz hübsch, das langt mir immer 😉

Update am Folgetag: Ich versuch mal meinen inneren Schweinehund zu überwinden und die drei Plugins doch zu einem Paket zusammenzufassen. Ich hab mir dazu mal eine lokale Kopie meines Praxis Dr. Inselfisch Blogs angelegt, auf der ich auf einer „leeren Wiesn“ entwickeln kann. Mal sehen wie weit ich komme.

Update drei Tage später: ich prokrastiniere. Mir ist das einfach zu fad, bereits funktionierende Code Snippets nochmal komplett neu zusammen zu fassen. Na, ich muss mal schauen. wahrscheinlich geh ich eh nochmal drüber, wenn ich das Stichwortverzeichnis auf einem Life-Blog einsetzen möchte. Erster Kandidat ist dieser hier 😉

Der Tabelleneditor für die Negativliste: die Screenshots

Die Negativliste bearbeiten geht nur auf der Admin-Seite, das hab ich mal so festgelegt. Ich habe einen neuen Admin Menüpunkt “ Negativliste bearbeiten“ angelegt, wenn man den aufruft sieht die Startseite so aus:

Negativliste-bearbeiten

Die bereits vorhandenen Worte werden tabellarisch angezeigt, Man kann sie Löschen, dann öffnet sich das Unterformular und man muss nochmal auf den Button „Löschen“ klicken:

Wort-loeschen

Erst dann wird der Delete aktiv:

 Wort-loeschen-OK

 

…oder man kann einen neuen Eintrag anlegen.

Wort-eintragen

Ein kleines, aber rundes Feature, finden sie nicht auch? 🙂

Was mich allerdings beim Entwickeln ein bisschen ausgebremst hat: die Routinen für den Insert und Create und Delete haben mir ein paar Mal den Webserver abgeschossen bis sie fehlerfrei durchgelaufen sind, da half nur ein kompletter Neustart von Apache, MySQL und Xampp. Das darf natürlich in einer „richtigen“ WordPress-Umgebung nicht passieren, da muss man noch Fehlerbehandlungsroutinen einbauen. ich hab da jetzt aber keine Lust mehr dazu.

So, was fehlt noch? Ach ja, die Negativliste wartet noch auf ihren Einsatz beim Aufbau des Stichwortregisters. Das überleg ich mir morgen, wo man da am Geschicktesten einhakt.

Stichwortverzeichnis Negativliste: wir basteln uns einen Tabelleneditor

Ich bin mir ziemlich sicher dass ich sowas in der Art schon mal gemacht habe, aber ich finde es nicht mehr. Na ja, das übt und ist eine hübsche kleine Fingerübung. Ich mach mal einen kurzen PAP:

  • Die Tabelle für die Negativliste wird beim Setup des Stichwort-Plugins mit angelegt und mit einigen wenigen Beispieleinträgen befüllt. Jedenfalls gehe ich davon aus, dass sie schon existiert.
  • Es gibt einen neuen Admin-Menüpunkt Negativliste bearbeiten. Hier wird die existierende Liste tabellarisch angezeigt.
  • Es gibt bei jedem Datensatz einen Button „Löschen“ (mit Rückfrage)
  • Es gibt unterhalb der Tabelle einen Button „Neues Wort eintragen“
  • Die Buttons machen jeweils eine Unterseite auf, auf der die gewählte Aktion nochmal bestätigt wird.

Das wars eigentlich schon. Dann wollen wir mal. Zuerst kommen die Einträge für das Admin-Menü:

add_action('admin_menu', 'negativliste_plugin_setup_menu');

function negativliste_plugin_setup_menu(){
add_menu_page( 'Negativliste', 'Negativliste bearbeiten', 'manage_options', 'negativliste', 'negativliste_init' );
add_submenu_page('Negativliste', 'Eintragen', 'Eintragen', 'manage_options', 'eintragen', 'eintragen_function');
add_submenu_page('Negativliste', 'Loeschen', 'Loeschen', 'manage_options', 'loeschen', 'loeschen_function');
}

Schauen wir uns als erstes mal die Funktion negativliste_init an. Zuerst wird gecheckt, ob die Tabelle negativliste schon vorhanden ist:

//Überprüfen ob Tabelle schon existiert
$table_exists = $wpdb->get_var( "SHOW TABLES LIKE 'negativliste'" ); 

if ($table_exists == "") {
echo "Tabelle negativliste existiert noch nicht";
... (hier kann die Tabelle neu erstellt werden)


Da muss ich nochmal ran, eigentlich sollte die Tabelle beim Initialisieren des Plugins Stichworttabelle mit angelegt werden. Hier nur mal Interessehalber der Code zum Erstellen:

//Begin function tabelle_erzeugen - legt die Tabelle negativliste mit einem Feld "wort" an
function tabelle_erzeugen(){

global $wpdb;

$charset_collate = $wpdb->get_charset_collate();

$sql = "CREATE TABLE negativliste (
wort text
) $charset_collate;";

require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
dbDelta( $sql );

} //End function tabelle_erzeugen

Interessant wirds im Else-Zweig der Funktion, da  kommt die Datenbankabfrage und der Aufbau der Tabelle zur Anzeige. Ich schau erst mal nach, ob die Tabelle überhaupt Datensätze hat und baue die Tabelle nur auf, wenn es mehr als 0 Datensätze sind:

function tabelle_bearbeiten(){

global $wpdb;
//Datensätze zählen & Ausgabe Anzahl
$count_query = "select count(*) from negativliste";
$num = $wpdb->get_var($count_query);
echo $num."&nbsp Einträge gefunden</br>";

if ($count_query <> 0) {

$anzeige_query = $wpdb->get_results("SELECT wort FROM negativliste ORDER BY wort");
...

So wird der Tabellenhead zusammengebaut:

echo "<table border='1' cellpadding='5'>
<tr>
<th>Wort</th>
<th>delete</th>
</tr>";

Danach steppe ich durch alle gefundenen Datensätze durch und baue ein Formular mit einem Löschen-Button zusammen. Der Button ruft die Unterseite loeschen auf und gibt als Parameter das aktuelle Wort mit.

echo "<form method='post'>";
foreach ($anzeige_query as $dsatz) {
echo "<tr>";
$id = $dsatz->wort;

echo "<td>" . $dsatz->wort . "</td>";
echo "</td>" .
"<td><input type='submit' name='löschen' formaction='admin.php?page=loeschen&aktuell=".$id."' value='löschen'></td>" .

"</tr>";
}// ende von foreach dsatz

Jetzt kommt nur noch ein Link zur der Seite auf der man einen neuen Datensatz eintragen kann, dann wars das auch schon:

echo "<p><input type='submit' name='eintragen' formaction='admin.php?page=eintragen' value='Neues Wort eintragen'></p></form> ";

Jetzt fehlen noch die Funktionen zum Eintragen eines neuen Datensatzes und zum Löschen des gewählten Datensatzes. Zuerst die zum Eintragen:

Zuerst wird ein kleines Formular aufgebaut: es gibt ein Textfeld, in das man das neue Wort eintragen kann, und einen Button zum Speichern. Wenn auf diesen Button geklickt wird, wird der Insert aufgerufen und kriegt das Wort als Parameter mit.

if (isset($_POST['neuesWortEintragen'])){
			$aktWort = $_POST["wort"];
			echo "Neues Wort ".$aktWort." wird eingetragen";
			
	// Insert-Anweisung erstellen
    $check = $wpdb->insert( 'negativliste', array( 'wort' => ''.$aktWort.'' ) );

    if($check) {
        echo "Ein neuer Datensatz erfolgreich hinzugefügt";
    }
	} // ende von isset 

Dann kommt noch ein Link zurück zum Hauptformular, und das wars.

 

echo "</form>";

echo "<a href='admin.php?page=negativliste'>Zurück zur Übersicht</a>";

Das Formular zum Löschen eines Datensatzes sieht ganz ähnlich aus, das Textfeld ist allerdings schreibgeschützt, es dient nur zur Anzeige des als Parameter übergebenen Worts.

function loeschen_function(){

global $wpdb;

$aktWort = $_GET['aktuell'];
echo $aktWort." wird gelöscht";

echo "<h2><Löschen</h2>";

echo "<form action='admin.php?page=loeschen&aktuell='".$aktWort."' method='post'>";
echo "<p><input name='wort' type='text' value = '$aktWort' readonly></p>";
echo "<p><input type='submit' name='WortLoeschen' value='Wort löschen'></p>";
...

Wenn auf den Button „Wort Löschen“ geklickt wird, triggert der Delete-Befehl:

if (isset($_POST['WortLoeschen'])){
$aktWort = $_POST["wort"];
echo "Wort ".$aktWort." wird gelöscht</br>";

// Delete-Anweisung erstellen
$check=$wpdb->query("DELETE FROM negativliste WHERE wort = '$aktWort'");

if($check) {
echo "Ein Datensatz erfolgreich gelöscht";
}
echo "</form>";

Auch hier kommt noch der Link zurück zur Übersicht, und das wars.  Jetzt fehlen noch ein paar Screenshots, aber dafür gibts einen neuen Beitrag.

Stichwortverzeichnis: die Negativ-Liste

Was soll die können? Nun, ganz einfach. Man soll da Wörter eintragen können, die in dieser Schreibweise nicht im Stichwortregister auftauchen sollen.

Hintergrund: die Stichwortliste wird ja programmgesteuert erzeugt und nimmt prinzipiell alle Wörter auf, die großgeschrieben sind. Die werden dann noch von etlichen Sonderzeichen bereinigt, aber es kann natürlich nicht geprüft werden, ob es sich wirklich um Substantive handelt oder ob nur ein Wort am Satzanfang großgeschrieben wurde.  Da rutschen dann schon mal Wörter durch wie Es, Da, Was, Das, So… klar was ich meine? Sind halt keine sinnvollen Stichwörter. Ich hab in der Access-Version mal versuchsweise alle Wörter ausgeblendet, die weniger als 3 Buchstaben haben, aber so ganz das Gelbe vom Ei ist das auch nicht. Auf dem Programmierblog hier würde dann z.B. alle rausfallen was SQL oder PHP oder AI  heißt – nicht gut!

Woher soll mein Plugin aber wissen, welche Wörter es ausblenden soll? Eben! Hier kommt die Negativliste ins Spiel. Ich versuche es mal mit einer Tabelle, obwohl ein CSV sicher auch sinnvoll wäre, das könnte man auch extern bearbeiten. Wie auch immer, es muss ein Admin-Menüpunkt her „Negativliste bearbeiten“. Und die Liste muss an geeigneter Stelle überprüft werden, das mach ich am besten an der Stelle, wo das CSV mit den Stichwörtern in ein Array eingelesen wird. Wenn ein Wort in der Negativliste gefunden wird, soll es nicht ins Array aufgenommen werden. Sollte so oder ähnlich funken, ich fang mal an und berichte später.