web-dev-qa-db-ja.com

メタフィールドを公開日+ 2週間に設定

私はpostexpiryと呼ばれるメタフィールドを持っています、そして私は値を公開日、+ 2週間に設定したいです。したがって、今日が10月3日だったとしたら、このフィールドを10月17日に設定したいと思います。

私はpublish_postフィルターへのフックを作成することを考えていました、しかし私はget_the_date()に2週間を追加する方法がわかりません。

私はphpでこの$dateInTwoWeeks = strtotime('+2 weeks');のようなことができることを知っていますが、get_the_date()でそれをどのように使うかはわかりません。

ありがとうございます。

UPDATE

次のコードを試しましたが、何もしませんでした。

function dp_expiry() {

$dp_new_expiry_date = strtotime( '+2 weeks', strtotime( $post->post_date ) );
update_post_meta( get_the_ID(), 'postexpiry', $dp_new_expiry_date );
}

add_action( 'publish_post', 'dp_expiry' );

また、私のテーマは日付がyyyy-mm-ddフォーマットであることを要求します。

アップデート2

このコードはフィールドに "1209600"を出力します。何か案は?ありがとうございます。

add_action('publish_post', 'dp_expiry');
function dp_expiry( $data ) {

$dp_new_expiry_date = strtotime( '+2 weeks', strtotime( $post->post_date ) );

update_post_meta( $data['post_id'], 'postexpiry', $dp_new_expiry_date );
}
1
Edegist

これを試して:

add_action('publish_post', 'dp_expiry');
function dp_expiry( $data ) {
    /*adds 2 weeks onto the current date in unix Epoch format*/
$dp_new_expiry_date = (strtotime( current_time( 'mysql' ) ) + 1209600);
        /*converts unix timstamp back to yyyy-mm-dd format like you required*/
    $dp_new_expiry_date_conv = date("Y-m-d", $dp_new_expiry_date);
update_post_meta( $data['post_id'], 'postexpiry', $dp_new_expiry_date_conv );
}
0
harvey

get_the_ID()はループ関数であり、ここでは動作しないかもしれません。代わりにコールバックのパラメータを使うべきです:

function dp_expiry( $ID, $post ) {

    $dp_new_expiry_date = strtotime( '+2 weeks', strtotime( $post->post_date ) );

    update_post_meta( $ID, 'postexpiry', $dp_new_expiry_date );
}

add_action( 'publish_post', 'dp_expiry', 10, 2 );

publish_postは投稿に対してのみ機能し、ページには機能しません。カスタム投稿タイプにはpublish_{post_type}を使用できます。

0
Michael