php ACF模板输出

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php ACF模板输出相关的知识,希望对你有一定的参考价值。

<?php
/**
 * Template Name: ACF DEV
 * Template Post Type: park
 * @package adp
 */
?>

<pre>
<code>
<?php 


function generate_acf_output($type, $name, $isSub ) {
    $fieldsBasic = [
        'text',
        'wysiwyg',
        'textarea',
    ];

    $fieldsWithChildren = [
        'repeater',
    ];    

    $output = [];
    $output[1] = '';
    $get = 'get_field';
    $the = 'the_field';
    $subLbl = '';
    if ($isSub) {
        $get = 'get_sub_field';
        $the = 'the_sub_field';
        $subLbl = ' subfield';
    }

    // image
    if ($type == 'image') {
        $output[0] =
'<?php $attachment_id = ' .$get. '("'. $name .'");
$imgObj = wp_get_attachment_image_src( $attachment_id["id"], "full" );
$imgUrl = $imgObj["0"]; ?>'
;
}
    // posts object
    elseif ($type == 'post_object') {
        $output[0] =
'<?php $post_object = ' .$get. '("'. $name .'");
if( $post_object ): 
// override $post
$post = $post_object;
setup_postdata( $post ); 
?>
<!-- post content here -->';
     $output[1] = 
'
<!-- post content end -->
<?php wp_reset_postdata(); ?>
<?php endif; ?>';
    }

    // fields with children
    elseif (in_array($type, $fieldsWithChildren)) {
       $output[0] =
'<?php if(' .$get.'("'. $name .'")): ?>
<?php while(has_sub_field("'. $name .'")): ?>
<!-- sub_fields_here -->'. "\n";
        $output[1] .=
'<?php while; ?>
<?php endif; ?>';

    }
    // fields with children
    elseif ($type == 'flexible_content') {
       $output[0] =
'<?php if(' .$get.'("'. $name .'")): ?>
<?php while(has_sub_field("'. $name .'")): ?>
<!-- sub_fields_here -->'. "\n";
        $output[1] .=
'<?php while; ?>
<?php endif; ?>';

    }


    //Basic Fields Markup
    elseif (in_array($type, $fieldsBasic)) {
       $output[0] = 
'<?php if(' .$get.'("'. $name .'")): ?>
<?php ' .$the.'("'. $name .'"); ?>
<?php endif; ?>';
} else {
    $output[0] = 'Got nothing for this field type hit the docs! TYPE:  ' . $type . '  NAME:  ' . $name;
}
    $output[1] .= "\n". "<!--  *** end ".$type.$subLbl." *** -->\n\n";
    return $output;
}

function output_acf_template_code() {
$fields = get_field_objects();
if( $fields ) {
    foreach( $fields as $field ){
    echo '<div>';
        $l1 = generate_acf_output($field['type'], $field['name'], false);
        echo htmlspecialchars($l1[0]);            
        if (array_key_exists('sub_fields', $field)) {
       
            foreach( $field['sub_fields'] as $sfield ) {
                $l2 = generate_acf_output($sfield['type'], $sfield['name'], true);
                echo htmlspecialchars($l2[0]);
               
                if (array_key_exists('sub_fields', $sfield)) {

                    foreach( $sfield['sub_fields'] as $ssfield ) {
                    $l3 = generate_acf_output($ssfield['type'], $ssfield['name'], true);
                    echo htmlspecialchars($l3[0]);                            
                        if (array_key_exists('sub_fields', $ssfield)) {

                            foreach( $ssfield['sub_fields'] as $sssfield ) {
                                $l4 = generate_acf_output($sssfield['type'], $sssfield['name'], true);
                                echo '<div> **** 4th level subfield... additional children of this nested subfield will not be outputted, check ACF\n';
                                echo htmlspecialchars($l4[0]);                                 
                                echo htmlspecialchars($l4[1]);                                 
                                echo '</div>';
                            }
                        }
                    echo htmlspecialchars($l3[1]);     
                    }
                }
            echo htmlspecialchars($l2[1]);     
            }
        }
        echo htmlspecialchars($l1[1]);
    echo '</div>';
    }
} 
}

output_acf_template_code();

?>
</code>
</pre>

以上是关于php ACF模板输出的主要内容,如果未能解决你的问题,请参考以下文章

php acf关系循环根据复选框值加载不同的模板

php ACF限制输出

php 使用ID的ACF输出图像

php 使用ACF创建Google Analytics字段和输出

php 使用ACF创建Google Analytics字段和输出

php 具有缩略图大小的ACF图像阵列简单输出