web-dev-qa-db-fra.com

Remplir automatiquement un champ personnalisé avec une valeur complexe qui augmente d'un?

Quelqu'un peut m'aider à trier cela?

J'utilise WP 3.5.2 et j'ai le type de poste "Orders" où se trouve le champ personnalisé purchase_order.

Voici l'exemple d'enregistrement de la commande d'achat:

POCOS20130051

PO - est un préfixe toujours identique

CO - 2 premières lettres du nom du site - si le nom du site est "Coca Cola" - CO apparaîtra (si je change le nom du site, cela changera aussi )

S - toujours le même

2013 - année en cours

0051 - nombre qui augmente de 1 lorsque vous cliquez sur Ajouter un nouvel ordre. Doit avoir 4 caractères. Si le nombre est 1, 0001 apparaîtra.

À présent....

J'ai besoin de cela comme un crochet qui générera et peuplera automatiquement mon item personnalisé Purchase_order. Le numéro de bon de commande doit être généré comme un enregistrement unique.

La fonction doit compter "publié et rédigé" Order post types, puis augmenter ce nombre d'un, afin que la dernière partie du numéro de commande puisse être générée (0051).

Pour la référence, jetez un œil à la façon dont ce mec a résolu un problème similaire http://www.codeproject.com/Articles/491733/Auto-generated-sequence-number-in-SQL-Server

Merci.

1
Danijel

Je suppose que vous avez besoin d’un endroit pour stocker globalement le dernier numéro de commande. Préférable dans la table wp_options. La méthode update_option vous aidera. Ensuite, vous devez créer une fonction qui se déclenche à chaque fois qu'un nouvel ordre apparaît.

quelque chose comme ca:

add_action( 'save_post', 'setOrderNumber');
function setOrderNumber($post_id) {

  $slug = 'orders'; // slug of your post_type called "Orders"

  if ( $slug != $_POST['post_type'] ) {
        return;
    }
  if ( !current_user_can( 'edit_post', $post_id ) ) {
        return;
    }

  $counter = get_option( 'lastOrderCount' ); // example 0051
  $counter++; // returns 0052
  update_post_meta($post_id, 'purchase_order', 'POCOS'.date('Y').$counter);
  update_option( 'lastOrderCount', $counter ); // set the new number of order. 
}

Je n'ai pas vérifié cette fonction, mais j'espère que ça marche.

1
Lilumi