J'utilise WordPress et j'utilise un champ personnalisé qui porte le nom ecpt_carprice
pour chaque message publié, le champ est enregistré dans wp_postmeta
identique à l'image jointe:
Certaines de mes voitures (publications) n'ont pas de clé méta ecpt_carprice
.
Pouvez-vous me fournir un moyen (requête WordPress/PHP ou SQL) de stocker pour chaque message sans la méta-entrée une nouvelle entrée de valeur 0?
J'ai ce code mais je ne sais pas comment l'utiliser
if ( has_term( '', 'car_brand' )) {
//check if the meta field has a value
$meta_values = get_post_meta($post->ID, 'ecpt_carprice', true);
if(empty($meta_values)){
//add a default value
add_post_meta($post->ID, 'ecpt_carprice', '0');
}
}
Si vous voulez et n'avez besoin que de faire ce que @tf a suggéré, c'est-à-dire d'afficher un 0 si aucune valeur n'est présente, vous pouvez construire une fonction comme ceci:
function wpse121165_return_carprice() {
$ecpt_carprice = get_post_meta($post->ID, 'ecpt_carprice', true);
if(! empty( $ecpt_carprice ) ){
return $ecpt_carprice;
} else {
return 0;
}
}
Utilisez la fonction comme ceci: echo wpse121165_return_carprice();
Si vous avez vraiment besoin de mettre à jour votre base de données, vous devez le faire d'une autre manière. Le code ci-dessous devrait vous donner un aperçu de la façon de le faire:
function wpse121165_update_carprice_meta() {
// args to query for your key
$args = array(
'post_type' => 'your_post_type',
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'ecpt_carprice',
'value' => 'bogus', // you have to pass a value
'compare' => 'NOT EXISTS'
),
array(
'key' => 'ecpt_carprice',
'value' => ''
)
),
'fields' => 'ids'
);
// perform the query to get back an array of ids
$not_exist_or_empty_ids = new WP_Query( $args );
foreach ( $not_exist_or_empty_ids as $id ) {
update_post_meta($id, 'ecpt_carprice', '0');
}
}
Utilisez la fonction comme ceci: wpse121165_update_carprice_meta();
. Si vous mettez ceci dans votre functions.php
et effectuez votre méta-mise à jour sur la base de données, assurez-vous de la désactiver par la suite et de ne pas l'appeler encore et encore.