WordPress.org

Plugin Directory

Changeset 1005893


Ignore:
Timestamp:
10/12/14 01:27:55 (3 years ago)
Author:
dustyf
Message:

Update plugin to version 1.0.
Changes:

  • Add ACF v5 support
  • Fixed an issue where it should have been buffering output
  • Add the ability to return the name of widget area instead of just the HTML output
  • Adding some escaping, better spacing, commenting
  • Better translation support for the few strings included
  • Fix bugs preventing from being used in Repeater Fields
  • Add checks for ACF existing and other checks
Location:
advanced-custom-fields-widget-area-field/trunk
Files:
1 added
3 edited

Legend:

Unmodified
Added
Removed
  • advanced-custom-fields-widget-area-field/trunk/acf-widget-area.php

    r761381 r1005893  
    44Plugin URI: https://github.com/dustyf/acf-widget-area 
    55Description: Adds a custom field allowing you to pick one of your widget areas (aka Sidebars) from WordPress 
    6 Version: 0.0.1 
     6Version: 1.0.0 
    77Author: Dustin Filippini 
    88Author URI: http://dustyf.com 
     
    1111*/ 
    1212 
     13// Exit if accessed directly 
     14if ( ! defined( 'ABSPATH' ) ) { 
     15    exit; 
     16} 
    1317 
    14 class acf_field_widget_area_plugin 
    15 { 
    16     /* 
    17     *  Construct 
    18     * 
    19     *  @description: 
    20     *  @since: 3.6 
    21     *  @created: 1/04/13 
    22     */ 
     18// Check if class exists, only run code if it does not 
     19if ( ! class_exists( 'acf_field_widget_area_plugin' ) ) { 
    2320 
    24     function __construct() 
    25     { 
    26         // version 4+ 
    27         add_action('acf/register_fields', array($this, 'register_fields')); 
     21    class acf_field_widget_area_plugin { 
     22        /* 
     23        *  Construct 
     24        * 
     25        *  @since: 1.0.0 
     26        */ 
     27 
     28        function __construct() { 
     29 
     30            /** 
     31             * Setup some base variables for the plugin 
     32             */ 
     33            $this->basename       = plugin_basename( __FILE__ ); 
     34            $this->directory_path = plugin_dir_path( __FILE__ ); 
     35            $this->directory_url  = plugins_url( dirname( $this->basename ) ); 
     36 
     37            /** 
     38             * Load Textdomain 
     39             */ 
     40            load_plugin_textdomain( 'acf_widget_area', false, dirname( $this->basename ) . '/languages' ); 
     41 
     42            /** 
     43             * Make sure we have our requirements, and disable the plugin if we do not have them. 
     44             */ 
     45            add_action( 'admin_notices', array( $this, 'maybe_disable_plugin' ) ); 
     46 
     47            /** 
     48             * Add action for version 5 
     49             */ 
     50            add_action( 'acf/include_field_types', array( $this, 'include_field_type' ) ); 
     51 
     52            /** 
     53             * Add action for version 4 
     54             */ 
     55            add_action( 'acf/register_fields', array( $this, 'register_fields' ) ); 
     56 
     57        } 
     58 
     59        /** 
     60         * Check that all plugin requirements are met 
     61         * 
     62         * @since  1.0.0 
     63         * 
     64         * @return bool 
     65         */ 
     66        public static function meets_requirements() { 
     67            /** 
     68             * If the main acf class doesn't exist, our plugin won't work. 
     69             */ 
     70            if( ! class_exists( 'acf' ) ) { 
     71                return false; 
     72            } 
     73 
     74            /** 
     75             * We have met all requirements 
     76             */ 
     77            return true; 
     78        } 
     79 
     80        /** 
     81         * Check if the plugin meets requirements and disable it if they are not present. 
     82         * 
     83         * @since 1.0.0 
     84         */ 
     85        public function maybe_disable_plugin() { 
     86 
     87            if ( ! $this->meets_requirements() ) { 
     88                // Display our error 
     89                echo '<div id="message" class="error">'; 
     90                echo '<p>' . sprintf( __( 'ACF Widget Area is missing requirements and has been <a href="%s">deactivated</a>. Please make sure all requirements are available.', 'acf_widget_area' ), admin_url( 'plugins.php' ) ) . '</p>'; 
     91                echo '</div>'; 
     92 
     93                // Deactivate our plugin 
     94                deactivate_plugins( $this->basename ); 
     95            } 
     96 
     97        } 
     98 
     99        /** 
     100         * Include field type for ACF v5 
     101         * 
     102         * @param $version 
     103         */ 
     104        function include_field_type( $version ) { 
     105 
     106            include_once( $this->directory_path . '/widget-area-v5.php' ); 
     107 
     108        } 
     109 
     110        /* 
     111        *  register_fields 
     112        * 
     113        *  @since: 1.0.0 
     114        */ 
     115 
     116        function register_fields() { 
     117 
     118            include_once( $this->directory_path . '/widget-area-v4.php' ); 
     119 
     120        } 
     121 
    28122    } 
    29123 
    30     /* 
    31     *  register_fields 
    32     * 
    33     *  @description: 
    34     *  @since: 3.6 
    35     *  @created: 1/04/13 
    36     */ 
    37  
    38     function register_fields() 
    39     { 
    40         include_once('widget-area-v4.php'); 
    41     } 
     124    new acf_field_widget_area_plugin(); 
    42125 
    43126} 
    44  
    45 new acf_field_widget_area_plugin(); 
  • advanced-custom-fields-widget-area-field/trunk/readme.txt

    r761402 r1005893  
    44Tags: advanced custom fields, acf, custom fields, widget, widgets, sidebar, sidebars, widget areas 
    55Requires at least: 3.4 
    6 Tested up to: 3.6 
     6Tested up to: 4.0 
    77Stable tag: trunk 
    88License: GPLv2 or later 
    99License URI: http://www.gnu.org/licenses/gpl-2.0.html 
    1010 
    11 Add-on to Advanced custom fields giving you a field to display Widget Areas. 
     11Add-on to Advanced Custom Fields giving you a field to display Widget Areas. 
    1212 
    1313== Description == 
    1414 
    1515Easily add and change Widget Areas on any page template using Advanced Custom Fields and the Advanced Custom Fields: Widget Area Field plugin.  This plugin will add a field with a drop-down selection of all registered Widget Areas in your WordPress installation.  You can select which widget area you would like to display in your template files when using ACF's get_field and the_field functions. 
     16 
     17As of version 1.0, support for ACF v5 is included. 
    1618 
    1719= This Plugin Requires Advanced Custom Fields Version 4 or Higher = 
     
    3840 
    3941= Include = 
    40 1.  Copy the 'acf-widget_area' folder into your theme folder (can use sub folders). You can place the folder anywhere inside the 'wp-content' directory 
    41 2.  Edit your functions.php file and add the code below (Make sure the path is correct to include the acf-widget_area.php file) 
     421.  Copy the 'acf-widget_area' folder into your theme folder (can use sub folders). 
     432.  Edit your functions.php file and add the code below (Make sure the path is correct to include the acf-widget_area.php file. You should also change my_register_fields function name to something unique.) 
    4244 
    4345` 
    4446add_action('acf/register_fields', 'my_register_fields'); 
    4547 
    46 function my_register_fields() 
    47 { 
     48function my_register_fields() { 
    4849    include_once('acf-widget_area/acf-widget_area.php'); 
    4950} 
     
    7273= 0.0.1 = 
    7374* Initial Release. 
     75 
     76= 1.0.0 = 
     77* Add ACF v5 support 
     78* Fixed an issue where it should have been buffering output 
     79* Add the ability to return the name of widget area instead of just the HTML output 
     80* Adding some escaping, better spacing, commenting 
     81* Better translation support for the few strings included 
     82* Fix bugs preventing from being used in Repeater Fields 
     83* Add checks for ACF existing and other checks 
  • advanced-custom-fields-widget-area-field/trunk/widget-area-v4.php

    r761381 r1005893  
    11<?php 
    22 
    3 class acf_field_widget_area extends acf_field 
    4 { 
    5     // vars 
    6     var $settings, // will hold info such as dir / path 
    7         $defaults; // will hold default field options 
     3// Exit if accessed directly 
     4if ( ! defined( 'ABSPATH' ) ) { 
     5    exit; 
     6} 
     7 
     8// Check if class exists, only run code if it does not 
     9if ( ! class_exists( 'acf_field_widget_area' ) ) { 
     10 
     11    class acf_field_widget_area extends acf_field { 
     12 
     13        // vars 
     14        var $settings, // will hold info such as dir / path 
     15            $defaults; // will hold default field options 
    816 
    917 
    10     /* 
    11     *  __construct 
    12     * 
    13     *  Set name / label needed for actions / filters 
    14     * 
    15     *  @since   3.6 
    16     *  @date    23/01/13 
    17     */ 
     18        /** 
     19         *  Setting everything up 
     20         * 
     21         *  @since  3.6 
     22         */ 
     23        function __construct() { 
    1824 
    19     function __construct() 
    20     { 
    21         // vars 
    22         $this->name = 'widget_area'; 
    23         $this->label = __('Widget Area'); 
    24         $this->category = __("Content",'acf'); // Basic, Content, Choice, etc 
    25         $this->defaults = array( 
    26             'allow_null' => 0 
    27         ); 
     25            // vars 
     26            $this->name     = 'widget_area'; 
     27            $this->label    = __( 'Widget Area', 'acf_widget_area' ); 
     28            $this->category = __( 'Content', 'acf' ); // Basic, Content, Choice, etc 
     29            $this->defaults = array( 
     30                'allow_null' => 0, 
     31            ); 
     32 
     33            // do not delete! 
     34            parent::__construct(); 
     35 
     36            // settings 
     37            $this->settings = array( 
     38                'path'    => apply_filters( 'acf/helpers/get_path', __FILE__ ), 
     39                'dir'     => apply_filters( 'acf/helpers/get_dir', __FILE__ ), 
     40                'version' => '1.0.0' 
     41            ); 
     42 
     43        } 
    2844 
    2945 
    30         // do not delete! 
    31     parent::__construct(); 
     46        /** 
     47         *  Create extra options for your field. This is rendered when editing a field. 
     48         *  The value of $field['name'] can be used (like bellow) to save extra data to the $field 
     49         * 
     50         *  @param  $field  - an array holding all the field's data 
     51         */ 
     52        function create_options( $field ) { 
     53 
     54            // defaults? 
     55            $field = array_merge( $this->defaults, $field ); 
     56 
     57            // key is needed in the field names to correctly save the data 
     58            $key = $field['name']; 
    3259 
    3360 
    34     // settings 
    35         $this->settings = array( 
    36             'path' => apply_filters('acf/helpers/get_path', __FILE__), 
    37             'dir' => apply_filters('acf/helpers/get_dir', __FILE__), 
    38             'version' => '1.0.0' 
    39         ); 
     61            // Create Field Options HTML 
     62            ?> 
     63            <tr class="field_option field_option_<?php echo esc_attr( $this->name ); ?>"> 
     64                <td class="label"> 
     65                    <label><?php _e( "Allow Null?", 'acf' ); ?></label> 
     66                </td> 
     67                <td> 
     68                    <?php 
     69                    do_action( 'acf/create_field', array( 
     70                        'type'    => 'radio', 
     71                        'name'    => 'fields[' . $key . '][allow_null]', 
     72                        'value'   => isset( $field['allow_null'] ) ? $field['allow_null'] : 0, 
     73                        'choices' => array( 
     74                            1 => __( "Yes", 'acf' ), 
     75                            0 => __( "No", 'acf' ), 
     76                        ), 
     77                        'layout'  => 'horizontal', 
     78                    ) ); 
     79                    ?> 
     80                </td> 
     81            </tr> 
     82            <tr class="field_option field_option_<?php echo esc_attr( $this->name ); ?>"> 
     83                <td class="label"> 
     84                    <label><?php _e( "Display Widget Area HTML or Return Widget Area Name", 'acf_widget_area' ); ?></label> 
     85                </td> 
     86                <td> 
     87                    <?php 
     88                    do_action( 'acf/create_field', array( 
     89                        'type'    => 'radio', 
     90                        'name'    => 'fields[' . $key . '][display_or_return]', 
     91                        'value'   => isset( $field['display_or_return'] ) ? esc_attr( $field['display_or_return'] ) : 'display', 
     92                        'choices' => array( 
     93                            'display' => __( "Display Widget Area HTML", 'acf_widget_area' ), 
     94                            'return'  => __( "Return Widget Name", 'acf_widget_area' ), 
     95                        ), 
     96                        'layout'  => 'horizontal', 
     97                    ) ); 
     98                    ?> 
     99                </td> 
     100            </tr> 
     101            <?php 
     102 
     103        } 
     104 
     105 
     106        /** 
     107         *  Create the HTML interface for your field 
     108         * 
     109         *  @param  $field - an array holding all the field's data 
     110         */ 
     111 
     112        function create_field( $field ) { 
     113 
     114            // create Field HTML 
     115            echo sprintf( '<select id="%d" class="%s" name="%s">', esc_attr( $field['id'] ), esc_attr( $field['class'] ), esc_attr( $field['name'] ) ); 
     116 
     117            // null 
     118            if ( $field['allow_null'] ) { 
     119                echo '<option value="null">' . _x( '- Select - ','ACF Widget Area Null Select Option', 'acf_widget_area' ) . '</option>'; 
     120            } 
     121 
     122            global $wp_registered_sidebars; 
     123            $i = 0; 
     124            foreach ( $wp_registered_sidebars as $registered_sidebar ) { 
     125                $widget_areas[ $i ]['id']   = $registered_sidebar['id']; 
     126                $widget_areas[ $i ]['name'] = $registered_sidebar['name']; 
     127                $i ++; 
     128            } 
     129 
     130            foreach ( $widget_areas as $widget_area ) { 
     131                $selected = selected( $field['value'], $widget_area['id'] ); 
     132                echo sprintf( '<option value="%1$s" %3$s>%2$s</option>', esc_attr( $widget_area['id'] ), esc_attr( $widget_area['name'] ), $selected ); 
     133            } 
     134 
     135            echo '</select>'; 
     136        } 
     137 
     138        /** 
     139         *  This filter is appied to the $value after it is loaded from the db and before it is passed back to the api functions such as the_field 
     140         * 
     141         *  @param  $value  - the value which was loaded from the database 
     142         *  @param  $post_id - the $post_id from which the value was loaded 
     143         *  @param  $field  - the field array holding all the field options 
     144         * 
     145         *  @return string The HTML value of the sidebar. 
     146         */ 
     147        function format_value_for_api( $value, $post_id, $field ) { 
     148 
     149            // bail early if no value 
     150            if( empty($value) ) { 
     151                return $value; 
     152            } 
     153 
     154            // If selected to return the name, we will do that now. 
     155            if ( 'return' == $field['display_or_return'] ) { 
     156                return esc_attr( $value ); 
     157            } 
     158 
     159            ob_start(); 
     160            if ( is_active_sidebar( $value ) ) : 
     161                echo '<div id="' . esc_attr( $field['id'] ) . '" class="acf-widget-area ' . esc_attr( $field['name'] ) . '" role="complementary">'; 
     162                dynamic_sidebar( $value ); 
     163                echo '</div>'; 
     164            endif; 
     165 
     166            return ob_get_clean(); 
     167 
     168        } 
    40169 
    41170    } 
    42171 
    43172 
    44     /* 
    45     *  create_options() 
    46     * 
    47     *  Create extra options for your field. This is rendered when editing a field. 
    48     *  The value of $field['name'] can be used (like bellow) to save extra data to the $field 
    49     * 
    50     *  @type    action 
    51     *  @since   3.6 
    52     *  @date    23/01/13 
    53     * 
    54     *  @param   $field  - an array holding all the field's data 
    55     */ 
    56  
    57     function create_options($field) 
    58     { 
    59         // defaults? 
    60         $field = array_merge($this->defaults, $field); 
    61  
    62         // key is needed in the field names to correctly save the data 
    63         $key = $field['name']; 
    64  
    65  
    66         // Create Field Options HTML 
    67         ?> 
    68  
    69         <tr class="field_option field_option_<?php echo $this->name; ?>"> 
    70             <td class="label"> 
    71                 <label><?php _e("Allow Null?",'acf'); ?></label> 
    72             </td> 
    73             <td> 
    74                 <?php  
    75                 do_action('acf/create_field', array( 
    76                     'type'  =>  'radio', 
    77                     'name'  =>  'fields['.$key.'][allow_null]', 
    78                     'value' =>  $field['allow_null'], 
    79                     'choices'   =>  array( 
    80                         1   =>  __("Yes",'acf'), 
    81                         0   =>  __("No",'acf'), 
    82                     ), 
    83                     'layout'    =>  'horizontal', 
    84                 )); 
    85                 ?> 
    86             </td> 
    87         </tr> 
    88         <?php 
    89  
    90     } 
    91  
    92  
    93     /* 
    94     *  create_field() 
    95     * 
    96     *  Create the HTML interface for your field 
    97     * 
    98     *  @param   $field - an array holding all the field's data 
    99     * 
    100     *  @type    action 
    101     *  @since   3.6 
    102     *  @date    23/01/13 
    103     */ 
    104  
    105     function create_field( $field ) 
    106     { 
    107         // create Field HTML 
    108         echo sprintf( '<select id="%d" class="%s" name="%s">', $field['id'], $field['class'], $field['name']  ); 
    109  
    110         // null 
    111         if( $field['allow_null'] ) 
    112         { 
    113             echo '<option value="null"> - Select - </option>'; 
    114         } 
    115          
    116         global $wp_registered_sidebars; 
    117         $i = 0; 
    118         foreach ( $wp_registered_sidebars as $registered_sidebar ) { 
    119             $widget_areas[$i]['id'] = $registered_sidebar['id']; 
    120             $widget_areas[$i]['name'] = $registered_sidebar['name']; 
    121             $i++; 
    122         } 
    123          
    124         foreach ( $widget_areas as $widget_area ) { 
    125             $selected = selected( $field['value'], $widget_area['id'] ); 
    126             echo sprintf( '<option value="%1$s" %3$s>%2$s</option>', $widget_area['id'], $widget_area['name'], $selected ); 
    127         } 
    128  
    129         echo '</select>'; 
    130     } 
    131  
    132     /* 
    133     *  format_value_for_api() 
    134     * 
    135     *  This filter is appied to the $value after it is loaded from the db and before it is passed back to the api functions such as the_field 
    136     * 
    137     *  @type    filter 
    138     *  @since   3.6 
    139     *  @date    23/01/13 
    140     * 
    141     *  @param   $value  - the value which was loaded from the database 
    142     *  @param   $post_id - the $post_id from which the value was loaded 
    143     *  @param   $field  - the field array holding all the field options 
    144     * 
    145     *  @return  $value  - the modified value 
    146     */ 
    147  
    148     function format_value_for_api($value, $post_id, $field) 
    149     { 
    150         $value = ''; 
    151         if ( is_active_sidebar( $field['value'] ) ) : 
    152             $value .= '<div id="secondary" class="widget-area" role="complementary">'; 
    153                 dynamic_sidebar( $field['value'] ); 
    154             $value .= '</div><!-- #secondary -->'; 
    155         endif; 
    156         return $value; 
    157     } 
     173    // create field 
     174    new acf_field_widget_area(); 
    158175 
    159176} 
    160  
    161  
    162 // create field 
    163 new acf_field_widget_area(); 
Note: See TracChangeset for help on using the changeset viewer.