wake-up-neo.net

Verwenden Sie eine separate benutzerdefinierte Tabelle (keine Beiträge), um Daten zum Hochladen von Dateien zu verarbeiten

Das Problem: Website, die mehr als 100 Fotos pro Post hat. Könnte möglicherweise die Anzahl der Einträge innerhalb weniger Jahre auf über 100.000 ansteigen lassen.

Das Dilemma: Ich würde mich viel lieber an die Standard-Benutzeroberfläche von WP halten, um Bilder/Dateien mit dem eingebauten Uploader für "Medien hinzufügen" zu bearbeiten. Ich möchte nach Möglichkeit vermeiden, eine separate Dateigalerie-Implementierung zu verwenden.

Die Frage: Hat jemand eine Möglichkeit gefunden, das Speichern von Daten von der posts_table in eine eigene benutzerdefinierte Tabelle umzuleiten, um die Dateidaten zu speichern? (ohne Core-Dateien hacken zu müssen)

7
user28216

Vielleicht gibt es eine verwaltbare Möglichkeit, die Bilder vom Speichern als Anhänge (auch bekannt als Posts) in ein Array zu verschieben, das auf der Ebene der übergeordneten Posts gespeichert wird. Ich denke, es wird davon abhängen, wie stark Sie die Bilder bearbeiten, löschen usw. müssen.

Ein Wechsel zu einem anderen Tisch könnte helfen, aber es scheint mir, als würden Sie Peter berauben, um Paul zu bezahlen. Sicher, größere Tabellen tun weh, aber wenn diese Zeilen woanders sind und Sie immer noch einen Join usw. benötigen, wie viel wird gespeichert? Ich denke, Sie müssen vielleicht ein bisschen mehr aus dem Kasten schaffen, um diese Nuss zu knacken.

1
Chief Alchemist

Ich nehme an, wenn Sie die Informationen wirklich in einer anderen Tabelle speichern möchten, können Sie dies tun, aber das Problem besteht darin, dass Sie diese Informationen sofort verwalten und Details wie die Post-ID hinzufügen, da dies Teil des globalen Post-Objekts ist Die Bild-URL (für eine Datei, die gerade hochgeladen wurde) ist nicht.

das Problem ist, dass, um die Medien über die eingebaute WordPress-Benutzeroberfläche in eine eigene Tabelle zu bringen, sie mit dem Medien-Uploader hochgeladen werden müssten, der Zeilen in der Posts-Tabelle als "Anhangstypen" erstellt, was das ursprüngliche Ziel zunichte macht .

um Zeilen aus anderen Tabellen zu entfernen, wenn ein Beitrag gelöscht wird, können Sie folgendermaßen vorgehen:

add_action('admin_init', 'codex_init');
function codex_init() {
if (current_user_can('delete_posts')):
    // todo: remove records when posts are removed
    add_action('delete_post', 'post_sync', 10);
endif;
}

function post_sync($pid) {
    global $wpdb;
    // no need to check, just delete and watch our for number of records deleted
    return $wpdb->query($wpdb->prepare('DELETE FROM custom_table_name WHERE post_id = %d', $pid));
 }

Weitere Informationen zu den Hooks erhalten Sie hier: http://codex.wordpress.org/Plugin_API/Action_Reference/

0
Terry Kernan

Sie können manuell eine neue Tabelle in Ihrem phpMyAdmin auf dem Server erstellen (es ist offensichtlich Ihre Site, die Sie nicht häufig auf einen neuen Server verschieben werden) oder Sie können natürlich die Tabellenerstellung mit einer Themeninstallation oder ähnlichem verknüpfen. Wordpress verwendet das Objekt/class $ wpdb , um eine Abfrage innerhalb der Wordpress-Datenbank durchzuführen. Dort können Sie sehen, wie eine Abfrage in der Datenbank WP ausgeführt wird. Also würde ich so etwas verwenden:

<?php
global $wpdb; // Object must be globalized.

$wpdb->query("
CREATE TABLE IF NOT EXISTS ".$wpdb->prefix."new_table (
    id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
    post_id bigint(20) NOT NULL,
    image_url varchar(250) NOT NULL,
    PRIMARY KEY (id),
    KEY post_id (post_id)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ");
?>

Sie können es in eine Funktion einfügen und beispielsweise mit theme_init oder etwas Ähnlichem verknüpfen. Ändern Sie die Felder nach Ihren Wünschen. Eine andere Möglichkeit ist die Verwendung der Funktion dbDelta (), die einige spezifische Regeln hat, und aus diesem Grund sehe ich nicht den richtigen Grund für die Verwendung (vielleicht gibt es einen und ich liege falsch) - alles darüber finden Sie hier (Ich kann wegen rep keine weiteren Permalinks setzen, sorry: D)

Nachdem Sie die Tabelle erstellt haben, können Sie sie beliebig bearbeiten - Sie können die Registrierung dieser Anhänge in eine neue Tabelle einbinden. Sie können auch eine Funktion einbinden, die das Einfügen von Anhängen in die Pfostentabelle verhindert. Aufgrund der geringen Anzahl von Spalten (wie zum Beispiel Postmeta-Tabellen) ist es vermutlich sehr leicht und daher muss die Leistung bei der Bearbeitung mit diesen Bildern verbessert werden.

0
ceruleus