2017-05-04 9 views
0

CPTの "XX Year in the Industry"テキストを表示しようとしています。アイデアは、顧客がカスタムフィールドで開始した職員の年を入力し、自動計算で現在の年の#を減算して表示することです。PHPの日付計算を短いコードで表示する

基本的な数学は次のとおりです。現在の年 - 入社開始年=表示年

これはほとんど働いている...しかし、計算は発生しません。ショートコードは機能しますが、計算は行いません。フィルターがないのですか?私はたぶん2つの関数を必要とするのでしょうか?ショートコードとcalcの2つの関数ですか?

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'); 

答えて

0

1)あなたは、このようなpost_metaから年取り出す必要があります。そうしないと、配列ではなく、単一の値を取得します、get_post_meta($post_id, 'ptb_start_year', true)
2)差を計算するには、開始日だけでなく特定の日付を指定する必要があります。ユーザーに年だけを入力させたい場合は、年が始まる(1月1日)と仮定して、コードに日と月を手動で追加する必要があります。
3)date_diff関数では、DateTimeオブジェクトをパラメータとして使用する必要があります。

上記のすべてをまとめる

、あなたのコードは次のようになります。

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; 
} 

しかし、あなたは正確な差異を計算する必要がない場合、あなたは(を推奨しません)だけで年間substractingによる違いを見つけることがあります。

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

なぜ単純なマイナスを推奨しませんか?残念ながらそれは動作します;) – jzvestor

+0

@jzvestor、それは正確な違いを計算しないので、お勧めしません。たとえば、開始日は2015-12-12、現在の日付は2017-05-04です。つまり、同社は** 1年間だけ**働いています。 1番目のソリューションは1年を返しますが、2番目のソリューションは2年を返します。 正確な違いが必要ない場合は、2番目のソリューションを自由に使用できます。 –

+0

ああ、ありがとう! – jzvestor

0

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');