Alter table von standard wp table

  • Hallo zusammen,

    Zur Initialisierung meiner Erweiterung muss ich einmalig einige Datenbankoperationen durchführen:
    In die Tabelle zB. wp_terms möchte ich die Spalte "fix_link" hinzufügen:
    Das SQL statement funktioniert (Ausführung in phpmyadmin) nur die Ausführung in WP scheitert

    PHP
    $sql_alter_table_terms ="ALTER TABLE $table__terms ADD `fix_link` varchar(200) NULL";
    dbDelta($sql_alter_table_terms);


    Was mache ich falsch?

    Zweite Frage:
    Um die Durchführung nur einmal laufen zu lassen, checke ich, ob diese bestimmte Spalte existiert:

    PHP
    $check_table_structure ="SELECT COLUMN_NAME
                                FROM INFORMATION_SCHEMA.COLUMNS
                                WHERE column_name LIKE '%fix_link%' ";
            
    if(!$wpdb->get_var($check_table_structure) == 'fix_link')
        {hpe_create_tables();
        }


    Gibt es da eine elegantere Lösung?
    Vielen Dank für Eure Unterstützung.

    crazyapple

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Mit einem LIKE??? ARGH!

    1. Das Feld sollte bei Aktivierung des Plugins hinzugefügt werden.
    2. Das Feld sollte bei Deaktivierung bzw. Löschung des Plugins komplett entfernt werden.
    3. Du solltest das auf eine Action legen ([FONT=courier new]add_action, init[/FONT]).
    4. Du solltest mit [FONT=courier new]register_activation_hook[/FONT] arbeiten.

    Weitere gegoogelte Infos:
    http://wp.tutsplus.com/tutorials/plug…ting-the-table/

  • So, ich habe die Antwort(en) gefunden: Der Befehl dbDelta ist an dieser Stelle falsch, denn
    Zitat:
    "If the table doesn't exist, it creates it.

    If the table exists but doesn't match, it's modified until it matches. This includes adding and updating columns, indexes, and other aspects."

    Mit $wpdb->query(...); funktioniert es einwandfrei.

    Jetzte habe ich noch eine Frage: vielen Dank für den Link, dieses prima Tutorial hatte ich noch nicht gegooglet. Welchen Vorteil oder Nutzten hat das meine custom tables zu registrieren?

    PHP
    $wpdb->wp_category ="{$wpdb->prefix}category";


    und wenn ich die action:

    PHP
    add_action( 'init', 'hpe_register_custom_tables', 1 );

    benutzte wird ja doch bei jedem refresh der Seite die function ausgeführt, obwohl es doch heißt: "Typically used by plugins to initialize. The current user is already authenticated by this time."
    Kann mich bitte jemand diesbezüglich aufklären? (den anderen Kram mit der Aufklärung habe ich verstanden:razz:)

  • Das Tutorial bezieht sich auf eine komplett neue Tabelle - die Infos dort kannst Du für Deine Tabellenspalte aber sicherlich auch gebrauchen.

    Deswegen sollst Du register_activation_hook verwenden. Die hier angegebene Funktion wird nur bei der AKTIVIERUNG des Plugins ausgeführt (also Tabellenspalte hinzufügen).

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!