2017-05-04 4 views
0

Tentative d'affichage du texte "XX Year in the Industry" sur un CPT. L'idée est que le client entrerait l'année où le membre du personnel a commencé dans un champ personnalisé et un calcul automatique soustrairait le # de l'année en cours et afficherait.Afficher le calcul de la date PHP, avec un code court

Les mathématiques de base est: Année actuelle - Entrée année de début = année affiché

Ceci est presque fonctionne ... mais le calcul ne se produit pas. Le shortcode fonctionne, mais pas le calcul. Ai-je manqué un filtre? Ai-je besoin de 2 fonctions, une pour le shortcode et une pour le calc?

function YearsIndustry_shortcode($metadata, $object_id, $meta_key, $single) { 
    $start_year = get_post_meta($post_id, 'ptb_start_year'); 
    $current_year = new DateTime("now"); 
    $displayed_year = date_diff($current_year, $start_year)->y; 
    $Years = $displayed_year. 'Years in Industry'; 
    return $Years; 
} 
add_shortcode('YII', 'YearsIndustry_shortcode'); 

Répondre

0

1) Vous devez récupérer l'année de post_meta comme celui-ci: get_post_meta($post_id, 'ptb_start_year', true), sinon vous aurez tableau, pas la seule valeur.
2) Pour calculer la différence, vous devez spécifier la date précise, et pas seulement l'année de début. Si vous souhaitez que l'utilisateur entre seulement l'année, en supposant que c'est le début de l'année (le 1er janvier), vous devez ajouter manuellement le jour et le mois dans votre code.
3) Dans date_diff fonction que vous devez utiliser DateTime objets en tant que paramètres.

résumerons tous ci-dessus, votre code devrait ressembler à:

function YearsIndustry_shortcode($metadata, $object_id, $meta_key, $single) { 
    $start_year = get_post_meta($post_id, 'ptb_start_year', true); 
    $start_date = new DateTime($start_year."-01-01"); 
    $current_date = new DateTime("now"); 
    $displayed_year = date_diff($current_date, $start_date)->y; 
    $Years = $displayed_year. 'Years in Industry'; 
    return $Years; 
} 

Mais si vous n'avez pas besoin de calculer la différence précise, vous pouvez trouver la différence en retranchant seulement années (pas recommandé):

function YearsIndustry_shortcode($metadata, $object_id, $meta_key, $single) { 
    $start_year = get_post_meta($post_id, 'ptb_start_year', true); 
    $current_year = date('Y'); 
    $displayed_year = $current_year - $start_year; 
    $Years = $displayed_year. 'Years in Industry'; 
    return $Years; 
} 
+0

Pourquoi le simple n'est-il pas recommandé? Malheureusement, cela fonctionne;) – jzvestor

+0

@jzvestor, Ce n'est pas recommandé, car il calcule pas de différence précise. Par exemple, la date de début est 2015-12-12, la date actuelle est 2017-05-04. Cela signifie que l'entreprise ne travaille que ** 1 année complète **. La 1ère solution reviendra 1 an, mais la 2ème solution reviendra 2 ans. Si vous n'avez pas besoin de différences précises, vous pouvez utiliser librement la deuxième solution. –

+0

Ah je vois, merci! – jzvestor

0

Got it !!

function YearsIndustry_shortcode() { 
    $start_year = get_post_meta(get_the_ID(), 'ptb_start_year', true); 
    $current_year = date('Y'); 
    $displayed_year = $current_year - $start_year; 
    $Years = $displayed_year. ' Years in Industry'; 
    return $Years; 
} 
add_shortcode('YII', 'YearsIndustry_shortcode');