2017-01-22 4 views
0

Wordpress + Timber + ACF Pro. Внутри functions.php у меня есть действие, которое запускается всякий раз, когда публикуется сообщение (с типом недели).ACF пользовательское поле. Получите поле внутри действия внутри functions.php

Я хотел бы взять данные с этого поста и использовать его для создания нового сообщения для каждого отдельного пользователя.

У меня есть работа после моды. Когда публикация публикуется, я захватываю название и имя пользователя и использую его как заголовок для вновь созданного сообщения.

Тем не менее, я сталкивался с проблемами при попытке получить данные ACF - например: поле даты недели. Все данные ACF возвращают NULL (я знаю, что поля заполнены).

Я прочитал документы, которые заявляют о доступе к данным, вам нужно вызвать get_field ('field_name', 'post_id') - что я сделал.

Я выписал $ ID - так что знайте, что это правильно.

Возможно ли это из-за порядка, в котором я запускаю вещи?

Вот мой код:

function weekly_published_post_setup($ID, $post) { 
    $customers = get_users(); 
    $theDate = get_field("week_commencing", $ID); 

// Array of WP_User objects. 
foreach ($customers as $user) { 

     $new_post = array(
       'post_type' => 'weekly_tasks', 
       'post_title' => $post->post_title . ' - ' . $theDate . ' - ' . $user->display_name, 
       'post_content' => $theDate, 
       'post_status' => 'publish', 
       'post_author' => $user->ID 
     ); 
    wp_insert_post($new_post); 

     } 
} 
add_action('publish_week', 'weekly_published_post_setup', 10, 2); 

** EDIT **

Оказывается, что WordPress пост был спасаемый перед полями АКФОМ был создан? Поэтому приятель реорганизовал мой код, чтобы использовать другое событие. Однако это не срабатывает, когда публикация публикуется ...

function week_published_delivery_setup($ID) { 

    $post = get_post($ID); 

    if ($post->post_type != 'week') { 
     return; 
    } 

    if($post->post_modified_gmt != $post->post_date_gmt){ 
     return; 
    } 

    $customers = get_users(); 

    $field = get_field('week_commencing', $ID); 

    $fields = post.get_field_objects($ID); 

    if($fields) 
    { 
     foreach($fields as $field_name => $field) 
     { 

       $tmp .= $field['label'] . $field['value']; 
     } 
    }*/ 



// Array of WP_User objects. 
foreach ($customers as $user) { 
     $new_delivery_post = array(
       'post_type' => 'delivery', 
       'post_title' => $post->post_title . ' - ' . $field . ' - ' . $user->display_name, 
       'post_content' => $post->post_title, 
       'post_status' => 'publish', 
       'post_author' => $user->ID 
     ); 
    wp_insert_post($new_delivery_post); 


     } 
} 
add_action('acf/save_post', 'week_published_delivery_setup', 20); 

ответ

0

Итак, теперь проверяем статус публикации для публикации и выполняем то, что необходимо. Триггерное действие, если old_status == future и публикация new_status ==, похоже, делают трюк.

function on_all_status_transitions($new_status, $old_status, $post) { 
    $ID = $post->ID; 
    if ($post->post_type != 'week') { 
     return; 
    } 

    if ($new_status != $old_status && $old_status == 'future' && $new_status == 'publish') { 

      $customers = get_users(); 

      $field = get_field('week_commencing', $ID); 



      // Array of WP_User objects. 
      foreach ($customers as $user) { 
       $new_delivery_post = array(
         'post_type' => 'delivery', 
         'post_title' => $post->post_title . ' - ' . $field . ' - ' . $user->display_name, 
         'post_content' => $post->post_title, 
         'post_status' => 'publish', 
         'post_author' => $user->ID 
       ); 
       wp_insert_post($new_delivery_post); 


       } 

    } 
} 
add_action( 'transition_post_status', 'on_all_status_transitions', 20, 3); 
Смежные вопросы