Incluyendo ACF en functions.php (WordPress)

5 minutos de lectura

avatar de usuario
lucas

Estoy haciendo un tema para vender en tema forrest por primera vez. He usado ACF como complemento estándar durante el desarrollo para asegurarme de que todo funciona.

Casi he terminado, así que decidí exportar mi ACF a PHP e incluirlo en mi functions.php expediente.

Copié/pegué el código que me dio en functions.php e incluido ACF, options-pagey repeater-field en una carpeta dentro de mi tema y los hice referencia en consecuencia.

Sin embargo, cuando visito mi sitio me sale este error:

Fatal error: Cannot redeclare class Acf in /Applications/MAMP/htdocs/omg/wp-content/themes/omg-v1/external/acf/acf.php on line 46

También eliminé los archivos de complementos reales de la carpeta de complementos.

¿Alguna idea de por qué podría estar fallando?

Sé que es mucho código, pero en caso de que alguien quiera mirar, este es el código que está en mi functions.php (que me dio ACF)

include_once('external/acf/acf.php' );
define( 'ACF_LITE' , true );

// Add-ons 
include_once('external/acf-repeater/acf-repeater.php');
include_once('external/acf-options-page/acf-options-page.php');



if(function_exists("register_field_group"))
{
    register_field_group(array (
        'id' => 'acf_featured-story',
        'title' => 'Featured Story',
        'fields' => array (
            array (
                'key' => 'field_5256bd0fc7592',
                'label' => 'Is this story featured?',
                'name' => 'featured-story',
                'type' => 'true_false',
                'message' => 'Yes',
                'default_value' => 0,
            ),
        ),
        'location' => array (
            array (
                array (
                    'param' => 'post_type',
                    'operator' => '==',
                    'value' => 'post',
                    'order_no' => 0,
                    'group_no' => 0,
                ),
            ),
        ),
        'options' => array (
            'position' => 'side',
            'layout' => 'default',
            'hide_on_screen' => array (
            ),
        ),
        'menu_order' => 0,
    ));
    register_field_group(array (
        'id' => 'acf_options',
        'title' => 'Options',
        'fields' => array (
            array (
                'key' => 'field_525d1b6d49043',
                'label' => 'Homepage Layout (Left Column)',
                'name' => 'homepage-layout-left',
                'type' => 'repeater',
                'instructions' => 'Select which categories you want to display on the homepage.',
                'sub_fields' => array (
                    array (
                        'key' => 'field_525d1b8a49044',
                        'label' => 'Category',
                        'name' => 'category',
                        'type' => 'taxonomy',
                        'column_width' => '',
                        'taxonomy' => 'category',
                        'field_type' => 'select',
                        'allow_null' => 0,
                        'load_save_terms' => 0,
                        'return_format' => 'id',
                        'multiple' => 0,
                    ),
                    array (
                        'key' => 'field_525d2473de72c',
                        'label' => 'Number of Posts',
                        'name' => 'number-of-posts',
                        'type' => 'number',
                        'column_width' => '',
                        'default_value' => 4,
                        'placeholder' => '',
                        'prepend' => '',
                        'append' => '',
                        'min' => 2,
                        'max' => '',
                        'step' => 2,
                    ),
                ),
                'row_min' => 1,
                'row_limit' => 4,
                'layout' => 'row',
                'button_label' => 'Add a category',
            ),
            array (
                'key' => 'field_525d25ee91b41',
                'label' => 'Homepage Layout (Sidebar)',
                'name' => 'homepage-layout-sidebar',
                'type' => 'repeater',
                'instructions' => 'Select which categories you want to display in the sidebar.',
                'sub_fields' => array (
                    array (
                        'key' => 'field_525d25ee91b42',
                        'label' => 'Category',
                        'name' => 'category',
                        'type' => 'taxonomy',
                        'column_width' => '',
                        'taxonomy' => 'category',
                        'field_type' => 'select',
                        'allow_null' => 0,
                        'load_save_terms' => 0,
                        'return_format' => 'id',
                        'multiple' => 0,
                    ),
                    array (
                        'key' => 'field_525d25ee91b43',
                        'label' => 'Number of Posts',
                        'name' => 'number-of-posts',
                        'type' => 'number',
                        'column_width' => '',
                        'default_value' => 4,
                        'placeholder' => '',
                        'prepend' => '',
                        'append' => '',
                        'min' => 2,
                        'max' => '',
                        'step' => 2,
                    ),
                ),
                'row_min' => 1,
                'row_limit' => 4,
                'layout' => 'row',
                'button_label' => 'Add a category',
            ),
            array (
                'key' => 'field_525d2afdf101b',
                'label' => 'Newsletter (optional)',
                'name' => 'newsletter',
                'type' => 'repeater',
                'sub_fields' => array (
                    array (
                        'key' => 'field_525d2b6612426',
                        'label' => 'Link',
                        'name' => 'link',
                        'type' => 'text',
                        'instructions' => 'If you have a newsletter, copy/paste your link in here.',
                        'column_width' => '',
                        'default_value' => '',
                        'placeholder' => '',
                        'prepend' => '',
                        'append' => '',
                        'formatting' => 'none',
                        'maxlength' => '',
                    ),
                    array (
                        'key' => 'field_525d2bb40e332',
                        'label' => 'Text',
                        'name' => 'text',
                        'type' => 'textarea',
                        'instructions' => 'Enter your call to action for the newsletter here.',
                        'column_width' => '',
                        'default_value' => 'Subscribe!

                        To the OMG! newsletter!',
                        'placeholder' => '',
                        'maxlength' => 100,
                        'formatting' => 'br',
                    ),
                ),
                'row_min' => 0,
                'row_limit' => 1,
                'layout' => 'row',
                'button_label' => 'Add Newsletter Link',
            ),
            array (
                'key' => 'field_525e8b77edf6e',
                'label' => 'Advert',
                'name' => 'adverts',
                'type' => 'repeater',
                'instructions' => 'Do you wish to display an advert in your sidebar?',
                'sub_fields' => array (
                    array (
                        'key' => 'field_525e8c1e3600f',
                        'label' => 'Advert Image',
                        'name' => 'advert-img',
                        'type' => 'image',
                        'instructions' => 'Upload a 300 x 200px image for best quality / load time',
                        'column_width' => '',
                        'save_format' => 'url',
                        'preview_size' => 'full',
                        'library' => 'all',
                    ),
                    array (
                        'key' => 'field_525e8d1699619',
                        'label' => 'Link',
                        'name' => 'ad-link',
                        'type' => 'text',
                        'column_width' => '',
                        'default_value' => '',
                        'placeholder' => '',
                        'prepend' => '',
                        'append' => '',
                        'formatting' => 'none',
                        'maxlength' => '',
                    ),
                ),
                'row_min' => 0,
                'row_limit' => 1,
                'layout' => 'table',
                'button_label' => 'Add an Advert',
            ),
        ),
        'location' => array (
            array (
                array (
                    'param' => 'options_page',
                    'operator' => '==',
                    'value' => 'acf-options',
                    'order_no' => 0,
                    'group_no' => 0,
                ),
            ),
        ),
        'options' => array (
            'position' => 'normal',
            'layout' => 'no_box',
            'hide_on_screen' => array (
            ),
        ),
        'menu_order' => 0,
    ));
}

Debe asegurarse de que sus inclusiones no colisionen con el propio ACF o con el complemento de otra persona que también lo use.

if( !class_exists('Acf') )
    include_once('external/acf/acf.php' );

if( !class_exists('acf_repeater_plugin') )
    include_once('external/acf-repeater/acf-repeater.php');

if( !class_exists('acf_options_page_plugin') )
    include_once('external/acf-options-page/acf-options-page.php');

Solo hay cuatro pasos para incluir ACF en functions.php

    /***********************************************************
    *               Integrate ACF in theme
    ***********************************************************/
    // 1. customize ACF path
    add_filter('acf/settings/path', 'my_acf_settings_path'); 
    function my_acf_settings_path( $path ) { 
        // update path
        $path = get_stylesheet_directory() . '/framework/acf/';    
        // return
        return $path;    
    } 

    // 2. customize ACF dir
    add_filter('acf/settings/dir', 'my_acf_settings_dir'); 
    function my_acf_settings_dir( $dir ) { 
        // update path
        $dir = get_stylesheet_directory_uri() . '/framework/acf/';    
        // return
        return $dir;    
    } 

    // 3. Hide ACF field group menu item
    add_filter('acf/settings/show_admin', '__return_false');

    // 4. Include ACF
    include_once( get_stylesheet_directory() . '/framework/acf/acf.php' );

    // including acf fields
    require_once( get_template_directory() . '/framework/acf-fields.php' );

¿Ha sido útil esta solución?