J'ai une méta de publication masquée appelée _payment
pour mes publications. Quand j'ai regardé dans les tables de la wordpress, j'ai remarqué qu'il y a des dizaines de ce post meta avec le même nom pour le même post! Voici une photo de la base de données:
Je ne pense pas avoir écrit un code erroné à cause de cela, je viens d'ajouter et de mettre à jour le champ, mais il devrait mettre à jour le même champ avec le même meta_id
, sans créer un nouveau avec un meta_id
différent pour le même message.
Mais toujours je ne sais pas, peut-être que c'est une chose wordpress normale? Ou je me trompe ...
Voici les codes que j'utilise pour modifier ce champ:
function payment_meta($post_ID)
{
$user_id = get_post_field( 'post_author', $post_ID );
$user_role = 'editor';
$post_type = 'portfolio';
if( get_post_type( $post_ID ) == $post_type ) {
if ( get_post_meta($post_ID, '_payment', true) != '1' && !user_can( $user_id, $user_role )) {
add_post_meta($post_ID, '_payment', '0');
}
else if ( get_post_meta($post_ID, '_payment', true) == '' && user_can( $user_id, $user_role )) {
add_post_meta($post_ID, '_payment', '1');
}
}
}
add_action('wp_insert_post', 'payment_meta', 11, 1);
Et ce code, cela exécute un travail cron lorsque le post expire:
function unpublish_post($post_id)
{
wp_update_post(array(
'ID' => $post_id,
'post_status' => 'pending'
));
update_post_meta($post_id, '_payment', '0');
}
add_action('expiration_date', 'unpublish_post', 11, 1);
wp_insert_post
s'exécute chaque fois qu'une publication est mise à jour, pas seulement lorsqu'elle est enregistrée pour la première fois. Donc, votre fonction payment_meta()
est exécutée à chaque fois qu'une publication est enregistrée, et puisque vous utilisez add_post_meta()
dans cette fonction, une nouvelle entrée de méta est créée chaque fois que la publication est enregistrée.
Au lieu d'utiliser add_post_meta()
, limitez l'utilisation de update_post_meta()
si une valeur n'est pas déjà définie, cela créera toujours la méta, mais si elle existe déjà, elle mettra à jour la valeur existante plutôt que d'en ajouter une nouvelle:
function payment_meta($post_ID)
{
$user_id = get_post_field( 'post_author', $post_ID );
$user_role = 'editor';
$post_type = 'portfolio';
if( get_post_type( $post_ID ) == $post_type ) {
if ( get_post_meta($post_ID, '_payment', true) != '1' && !user_can( $user_id, $user_role )) {
update_post_meta($post_ID, '_payment', '0');
}
else if ( get_post_meta($post_ID, '_payment', true) == '' && user_can( $user_id, $user_role )) {
update_post_meta($post_ID, '_payment', '1');
}
}
}
add_action('wp_insert_post', 'payment_meta', 11, 1);