Meilleure façon de supprimer par programme une catégorie / un terme d'une publication

8

Je travaille sur un script pour convertir tous les articles d'une catégorie donnée pour utiliser un indicateur postmeta à la place (les tests de MySQL m'ont montré que sur un site aussi grand que le mien, cela entraînera une diminution significative du temps de requête).

Lors de la conversion des messages, je veux simplement récupérer tous les messages de la catégorie, ajouter le postmeta puis supprimer la catégorie, ce qui me permettra de recharger cette fonction jusqu'à ce qu'il n'y ait plus de messages dans la catégorie.

Je ne trouve cependant pas une bonne fonction pour supprimer un terme d'un article. Je veux lui donner l'identifiant de poste et le terme taxonomie + ID et le faire gérer pour moi.

Je suis également intéressé par les plugins qui peuvent faire la conversion pour moi si quelqu'un en connaît un. Je n'ai trouvé aucun qui ait fait cat-> postmeta, contrairement à l'inverse qui peut être géré par le plugin de Scribu.

jerclarke
la source
Voulez-vous le faire via l'API, ou est-ce correct de le faire avec des requêtes SQL? Ce ne sera pas trop difficile, une seule requête pour insérer les nouvelles valeurs postmeta, une pour supprimer les relations post-catégorie et peut-être une pour mettre à jour le nombre de catégories.
Jan Fabry
Je veux vraiment utiliser l'API. Le nombre de catégories, etc. n'est pas quelque chose que je veux avoir à prendre en compte dans ce cas. Le wp_get_object_terms () / wp_set_object_terms () facilitera déjà la manipulation des termes, mais j'espérais une solution à une fonction à partir du noyau.
jerclarke

Réponses:

6

Hmmm, je ne me souviens pas ou ne trouve pas non plus de fonction d'ajustement.

Il est wp_set_object_terms()utilisé dans plusieurs wrappers comme wp_set_post_categories(). Il peut remplacer les catégories d'un article.

Ainsi, vous pouvez obtenir des catégories de messages, rechercher celles qui ne sont pas désirées et les réécrire en excluant les indésirables dans ce cas.

Rarst
la source
C'est la meilleure solution jusqu'à présent, et celle que j'utiliserai probablement. get_object_terms () pour récupérer, unset () celui que je ne veux pas, puis wp_set_object_terms () pour réenregistrer le tableau. Dommage qu'il n'y ait pas wp_set_object_term () et wp_remove_object_term ().
jerclarke
C'est comme ça que je l'ai fait dans le passé. C'est assez maladroit et propice à l'amélioration, mais je pense que c'est le meilleur modèle disponible.
éditeur