web-dev-qa-db-fra.com

Utilisez un tableau personnalisé séparé (pas de publication) pour gérer les données de téléchargement de fichier.

Le problème: Site Web contenant plus de 100 photos par publication. Pourrait éventuellement augmenter le nombre de postes au-delà de 100 000 entrées d’ici quelques années.

Le dilemme: Je préférerais de loin s'en tenir au défaut WP UI pour la gestion des images/fichiers avec le programme de téléchargement intégré "Ajouter un média". Si possible, j'aimerais éviter d'utiliser une implémentation séparée de la bibliothèque de fichiers.

La question: Quelqu'un a-t-il trouvé un moyen de détourner la sauvegarde des données de la posts_table vers votre propre table personnalisée pour stocker les données de fichier? (sans avoir à pirater les fichiers de base)

7
user28216

Il existe peut-être un moyen pratique de déplacer les images stockées en tant que pièces jointes (en d'autres termes, messages) vers un tableau conservé au niveau du poste parent. Je pense que cela dépendra de la quantité de travail nécessaire pour manipuler les images, les supprimer, etc.

Passer à une autre table pourrait aider, mais il me semble que vous volez peut-être Peter pour payer Paul. Bien sûr, les plus grandes tables font mal, mais si ces lignes sont ailleurs et si vous avez encore besoin d'une jointure, etc., combien va-t-on économiser? Je pense que vous devrez peut-être sortir un peu plus de la boîte pour casser cette noix.

1
Chief Alchemist

Je suppose que si vous voulez vraiment stocker les informations dans une autre table, vous pouvez le faire, mais le problème est de gérer ces informations immédiatement, en ajoutant des détails tels que post id est facile car cela fait partie de l'objet post global, mais l'URL de l'image (pour un fichier qui vient d'être téléchargé) ne l'est pas.

le problème est que, pour obtenir le média dans une table qui lui est propre via l'interface utilisateur wordpress intégrée, il faut le télécharger à l'aide de l'utilitaire de téléchargement de média qui crée des lignes dans la table des articles en tant que types de "pièces jointes", ce qui va à l'encontre de l'objectif initial. .

pour supprimer des lignes d'autres tables quand un article est supprimé, vous pouvez faire quelque chose comme ceci:

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));
 }

Vous pourrez obtenir plus d'informations sur les points d'ancrage ici: http://codex.wordpress.org/Plugin_API/Action_Reference/

0
Terry Kernan

Vous pouvez créer manuellement une nouvelle table dans votre phpMyAdmin sur le serveur (votre site ne doit évidemment pas être déplacé fréquemment), ou bien vous pouvez créer un tableau avec une installation par thème ou similaire. Wordpress utilise object/class $ wpdb pour réaliser toute requête dans la base de données Wordpress. Vous pouvez y voir comment exécuter une requête dans la base de données WP. Donc, je voudrais utiliser quelque chose comme ça:

<?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 ");
?>

Vous pouvez le mettre dans une fonction et le lier à theme_init par exemple ou quelque chose de similaire. Changer les champs selon vos préférences. Une autre façon consiste à utiliser la fonction dbDelta (), qui a quelques règles spécifiques et à cause de cela, je ne vois pas la bonne raison de l’utiliser (peut-être y en a-t-il et j’ai tort) - vous pouvez trouver tout cela ici (Je ne peux pas mettre plus de permaliens à cause de rep, désolé: D)

Après avoir créé la table, vous pouvez la manipuler comme vous le souhaitez - vous pouvez accrocher l’enregistrement de ces pièces jointes dans une nouvelle table. Vous pouvez également accrocher une fonction qui empêchera de mettre des pièces jointes dans la table des postes. À cause du petit nombre de colonnes (comme postmeta table, par exemple), je suppose que c'est léger et qu'il faut donc améliorer les performances en manipulant ces images.

0
ceruleus