web-dev-qa-db-fra.com

Fonction pour changer la méta valeur dans la base de données pour chaque message

J'ai une méta clé appelée "prijs" dans chaque post. La valeur de cette clé méta consiste en des nombres dans la structure suivante: 2 100,00

Je veux supprimer la virgule dans la valeur méta pour obtenir cette sortie: 2100.00

Donc, j'ai créé une fonction mais ça ne marche pas:

add_action('wp_insert_post', 'deleteCommaDB');
function deleteCommaDB($postID){
    $price_key = 'prijs';
    $getPrice = get_post_meta($postID, $price_key, true);
    $newPrice = str_replace(array(','), '', $getPrice);

    update_post_meta($postID, $price_key, $newPrice);

    return true;
}

J'ai créé la fonction deleteCommaDB. Cette fonction récupère la méta de publication à partir de la clé méta 'prijs' et remplace la virgule pour rien. Cette nouvelle valeur est enregistrée dans la variable $ newPrice. La prochaine chose à faire est de mettre à jour la méta de la publication avec la nouvelle valeur.

Qu'est-ce que je fais mal?

2
ElBrm

Vous n'aurez besoin que de l'exécuter une seule fois, mais tous vos articles devraient y figurer, puis les parcourir en boucle et mettre à jour la méta.

add_action('admin_init', 'deleteCommaDB');

function deleteCommaDB(){

    // The Query
    $args = array ( 'posts_per_page' => -1 );
    $the_query = new WP_Query( $args );

    // The Loop
    while ( $the_query->have_posts() ) :
        $the_query->the_post();

         $price_key = 'prijs';
        $getPrice = get_post_meta( get_the_ID(), $price_key, true);
        $newPrice = str_replace(array(','), '', $getPrice);
        update_post_meta(get_the_ID(), $price_key, $newPrice);

    endwhile;

}

Votre fonction ne s'exécute que lorsqu'une publication est insérée. Vous voudrez peut-être envisager de s'exécuter sur save_post et de nettoyer l'entrée $_POST en premier lieu.

1
helgatheviking

add_action ('wp_insert_post', 'deleteCommaDB'); - cette ligne appelle votre fonction uniquement lors de la création d'un post.

Afin de changer tous les messages précédemment sauvegardés, vous devrez ajouter votre fonction dans une boucle wordpress qui récupère tous les messages.

1
K Themes

Toujours prendre le bon outil pour le bon travail

Pas besoin de str_replace() et d'autres choses compliquées ou lentes. Utilisez ce que PHP ou WordPress fournit pour de tels cas:

Pour mémoire: Il existe également une fonction appelée money_format() .

1
kaiser