web-dev-qa-db-fra.com

Comment modifier les valeurs de la base de données lors de la mise à jour du thème

J'ai un thème publié dans la nature, mais je n'ai pas préfixé le type de message de manière appropriée. Oui, je sais, c'est dommage et je le regrette :(

Donc, j'utilise actuellement acme comme nom de type d'article, mais j'aime bien le changer en prefix_acme.

Je recherche la fonction/le point de liaison le plus approprié pour renommer le type de publication sans perdre de données afin que les utilisateurs ne rencontrent aucune différence.

Les valeurs de la base de données sous wp_posts -> post_type peuvent-elles être simplement modifiées lors d'une mise à jour de thème?

Si oui, la même chose peut-elle être faite pour wp_postmeta -> meta_key sans perdre le meta_value?

1
Frankie Jarrett

Ce ne sera pas la réponse complète mais je pense que cela vous aidera grandement si vous êtes capable de créer des modèles - vous pourrez le faire:

Dans le thème init (lorsqu’il installe), make fait en sorte que db query trouve toutes les publications avec votre post_type et renomme post_type à votre nouvelle valeur. (Je pense que cela est très facile et peut être fait avec 1 requête).

Assurez-vous ensuite que votre nouveau thème prend en charge ce nouveau post_type (il suffit de changer le nom du post_type) - C’est tout! Les clients ne perdront rien et le réparerz en quelques secondes :)

MAybe cette requête le fera: (non testé)

function fixme($oldname, $new_typename){
global $wpdb;
$wpdb->query( $wpdb->prepare( "UPDATE ".$wpdb->posts." SET post_type = %s WHERE post_type = %s", $new_typename, $oldname ) );                                                                                                                                                        

}

Vous pouvez utiliser la fonction suivante: $wpdb->prefix si vous devez obtenir un préfixe.

OU vous pouvez utiliser add_action( 'after_setup_theme', 'your_function_name' ); pour que, après que le thème soit installé, la fonction définie soit appelée, mais vous devez la modifier pour ne pas utiliser de paramètres afin de définir un nouveau type de post_type, mais de les écrire manuellement (affectez les valeurs $ oldname, $ new_typename)

Et oui, vous pouvez aussi faire la même chose avec les méta-clés (si elles ne sont pas nettoyées, si elles le sont, vous aurez besoin de plus de php que dans une situation normale). Vous pouvez faire ce que vous voulez avec des requêtes, car elles sont directement adressées à base de données.

1
Tommixoft