Wordpress на странице редактирования сообщения Сохранить, обновить сообщение мета - PullRequest
0 голосов
/ 18 октября 2018

Я пытаюсь создать / обновить мета сообщения, когда вы создаете / обновляете сообщение, которое относится к типу сообщения "предложение".Тем не менее, он не обновляет мета-пост.Этот код добавлен в мой файл functions.php.

add_filter( 'pre_post_update', 'update_voucher_deadline', 10, 2 );
function update_voucher_deadline( $post_id, $data ) { 
    $evergreen = get_field('offer_evergreen', $post_id);
    if ($evergreen == "evergreen-yes") {
        $year = date('Y');
        $month = date('m');
        $currentDate = "". $year . "-" . $month . "-" . date('d') . date('H') . ":" . date('i') . ":" . date('s');
        $day = date("t", strtotime($currentDate));
        $endOfMonth = "". $year . "-" . $month . "-" . $day . "23:59:00";

        //global $post; Tried with this uncommented and also didn't work.

        if ( ! add_post_meta($post_id, 'offer_voucher_deadline', $endOfMonth)) { 
            update_post_meta($post_id, 'offer_voucher_deadline', $endOfMonth);
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Я вижу, что вы используете плагин ACF для создания настраиваемого поля, что означает, что вы можете использовать фильтр acf/save_post, чтобы сделать что-то вроде этого.
1. Проверьте, сохраняем ли мы тип записи 'offer'
2. Проверьте,у нас есть настраиваемое поле 'offer_evergreen' со значением 'evergreen-yes'
3. Проверьте, есть ли у нас пользовательское поле 'offer_voucher_deadline', если да - обновите его.
4. Если у нас нет пользовательского поля 'offer_voucher_deadline', создайтеего и сохранить наши данные.

add_filter('acf/save_post', 'update_voucher_deadline', 20);
function update_voucher_deadline($post_id) {
    if ( get_post_type($post_id) != 'offer' ) //if current post type not equal 'offer' return
        return;

         $year = date('Y');
         $month = date('m');
         $currentDate = "". $year . "-" . $month . "-" . date('d') . date('H') . ":" . date('i') . ":" . date('s');
         $day = date("t", strtotime($currentDate));
         $endOfMonth = "". $year . "-" . $month . "-" . $day . "23:59:00";

    if ( get_field('offer_evergreen') == 'evergreen-yes' ) {

        if ( get_post_meta( $post_id, 'offer_voucher_deadline', true ) ) //If get post meta with key 'offer_voucher_deadline' - update meta
            update_post_meta($post_id, 'offer_voucher_deadline', $endOfMonth);
        else //else if do not have post meta with key 'offer_voucher_deadline' create post meta
            add_post_meta( $post_id, 'offer_voucher_deadline', $endOfMonth);

    } else {
        return; //Remove return and add what you want to save, if offer_evergreen not equal to evergreen-yes
    }
}
0 голосов
/ 18 октября 2018

Прежде всего, pre_post_update ловушка не срабатывает при создании, она срабатывает непосредственно перед обновлением существующего сообщения.

Вам необходимо использовать save_post ловушка, она будет срабатывать всякий раз, когда сообщение или страницасоздано или обновлено

add_action( 'save_post', 'update_voucher_deadline', 10, 3 );
/**
 * Save post metadata when a post is saved.
 *
 * @param int $post_id The post ID.
 * @param post $post The post object.
 * @param bool $update Whether this is an existing post being updated or not.
 */
function update_voucher_deadline( $post_id, $post, $update ) { 
    $evergreen = get_field('offer_evergreen');
    if ($evergreen == "evergreen-yes") {
        $year = date('Y');
        $month = date('m');
        $currentDate = "". $year . "-" . $month . "-" . date('d') . date('H') . ":" . date('i') . ":" . date('s');
        $day = date("t", strtotime($currentDate));
        $endOfMonth = "". $year . "-" . $month . "-" . $day . "23:59:00";

        //global $post; Tried with this uncommented and also didn't work.

        if ( ! add_post_meta($post_id, 'offer_voucher_deadline', $endOfMonth)) { 
            update_post_meta($post_id, 'offer_voucher_deadline', $endOfMonth);
        }
    }
}

Примечание: вы можете обновить свою функцию, используя $update param, если необходимо.

...