function get_layout_title($field, $layout, $i, $value)
 {
     // add loop
     acf_add_loop(array('selector' => $field['name'], 'name' => $field['name'], 'value' => array($value), 'field' => $field, 'i' => 0, 'post_id' => 0));
     // vars
     $title = $layout['label'];
     // filters
     $title = apply_filters('acf/fields/flexible_content/layout_title', $title, $field, $layout, $i);
     $title = apply_filters('acf/fields/flexible_content/layout_title/name=' . $field['_name'], $title, $field, $layout, $i);
     $title = apply_filters('acf/fields/flexible_content/layout_title/key=' . $field['key'], $title, $field, $layout, $i);
     // remove loop
     acf_remove_loop();
     // prepend order
     $title = '<span class="acf-fc-layout-order">' . ($i + 1) . '</span> ' . $title;
     // return
     return $title;
 }
Exemplo n.º 2
0
function have_rows($selector, $post_id = false)
{
    // vars
    $active_loop = acf_get_loop('active');
    $previous_loop = acf_get_loop('previous');
    $new_parent_loop = false;
    $new_child_loop = false;
    $sub_field = false;
    $sub_exists = false;
    $change = false;
    $key = "selector={$selector}/post_id={$post_id}";
    // reference
    $_post_id = $post_id;
    // filter post_id
    $post_id = acf_get_valid_post_id($post_id);
    // no active loops
    if (!$active_loop) {
        // create a new loop
        $new_parent_loop = true;
        // loop has changed
    } elseif ($active_loop['key'] != $key) {
        // detect change
        if ($post_id != $active_loop['post_id']) {
            $change = 'post_id';
        } elseif ($selector != $active_loop['selector']) {
            $change = 'selector';
        } else {
            // key has changed due to a technicallity, however, the post_id and selector are the same
        }
        // attempt to find sub field
        $sub_field = acf_get_sub_field($selector, $active_loop['field']);
        if ($sub_field) {
            $sub_exists = isset($active_loop['value'][$active_loop['i']][$sub_field['key']]);
        }
        // If post_id has changed, this is most likely an archive loop
        if ($change == 'post_id') {
            if (empty($_post_id) && $sub_exists) {
                // case: Change in $post_id was due to this being a nested loop and not specifying the $post_id
                // action: move down one level into a new loop
                $new_child_loop = true;
            } elseif ($previous_loop && $previous_loop['post_id'] == $post_id) {
                // case: Change in $post_id was due to a nested loop ending
                // action: move up one level through the loops
                acf_remove_loop('active');
            } else {
                // case: Chang in $post_id is the most obvious, used in an WP_Query loop with multiple $post objects
                // action: leave this current loop alone and create a new parent loop
                $new_parent_loop = true;
            }
        } elseif ($change == 'selector') {
            if ($previous_loop && $previous_loop['selector'] == $selector && $previous_loop['post_id'] == $post_id) {
                // case: Change in $field_name was due to a nested loop ending
                // action: move up one level through the loops
                acf_remove_loop('active');
            } elseif ($sub_exists) {
                // case: Change in $field_name was due to this being a nested loop
                // action: move down one level into a new loop
                $new_child_loop = true;
            } else {
                // case: Chang in $field_name is the most obvious, this is a new loop for a different field within the $post
                // action: leave this current loop alone and create a new parent loop
                $new_parent_loop = true;
            }
        }
        // loop is the same
    } else {
        // do nothing
    }
    // add parent loop
    if ($new_parent_loop) {
        // vars
        $field = get_field_object($selector, $post_id, false);
        $value = acf_extract_var($field, 'value');
        // add loop
        acf_add_loop(array('selector' => $selector, 'name' => $field['name'], 'value' => $value, 'field' => $field, 'i' => -1, 'post_id' => $post_id, 'key' => $key));
        // add child loop
    } elseif ($new_child_loop) {
        // vars
        $value = $active_loop['value'][$active_loop['i']][$sub_field['key']];
        $post_id = $active_loop['post_id'];
        // add loop
        acf_add_loop(array('selector' => $selector, 'name' => $active_loop['name'] . '_' . $active_loop['i'] . '_' . $sub_field['name'], 'value' => $value, 'field' => $sub_field, 'i' => -1, 'post_id' => $post_id, 'key' => $key));
    }
    // update vars
    $active_loop = acf_get_loop('active');
    // return true if next row exists
    if ($active_loop && is_array($active_loop['value']) && isset($active_loop['value'][$active_loop['i'] + 1])) {
        return true;
    }
    // no next row!
    acf_remove_loop('active');
    // return
    return false;
}