Champs personnalisés

Le système de champs personnalisés est ajouté par la brique CustomField présente dans le plugin mc_briques_cf.

Les champs personnalisés sont configurables sur les annonces et sur les utilisateurs. Par défaut, seuls deux types de champ sont disponibles (texte et sélection).

Créer un nouveau type de champ personnalisé

Voir le plugin mc_briques_geoloc pour un exemple concret de l’ajout d’un champ de type Géolocalisation (basé sur l’API Google).

Voici un exemple de code permettant d’ajouter un type de champ personnalisé dans la brique Exemple :

/wp-content/plugins/mc_briques_exemple/classes/briques/Exemple_init.php

<?php
/**
 * Initialisation de la Brique Exemple
 */
if(!defined('ABSPATH'))
    exit;

$customField = MCBriques::loadBrique('CustomField');
$exemple = MCBriques::loadBrique('Exemple');
if($customField && $exemple){
    $fieldsPath = dirname(__FILE__).'/fields/';
    require_once($fieldsPath.'Exemple.php');
}

/wp-content/plugins/mc_briques_exemple/classes/briques/fields/Exemple.php

<?php
/**
 * Brique Exemple : Champ Exemple
 */
if(!defined('ABSPATH'))
    exit;
/**
 * Brique Exemple : Champ Exemple
 *
 * @class           MCBriqueCustomField_Exemple
 * @category        Class
 * @package         Briques\Classes\Brique\CustomField
 */
if(class_exists('MCBriqueCustomField_Abstract')){
    class MCBriqueCustomField_Exemple extends MCBriqueCustomField_Abstract
    {
            // Nom du type de champ personnalisé
            protected static $field = 'Exemple';
            // Configuration du type de champ ( voir la fonction MCBriqueCustomField_Abstract::getConfig() )
            protected static $config = array(
                    'label' => 'Champ exemple',
                    'brique' => 'Exemple'
            );

            /**
             * Filtrage de la valeur du champ
             */
            public static function sanitize_value($value, $cleanValue=false){
                    if($cleanValue === false)
                            $cleanValue = $value;
                    return parent::sanitize_value($value, (is_string($cleanValue))? sanitize_text_field($cleanValue) : '');
            }
    }
    MCBriqueCustomField_Exemple::init();
}

Note

Une configuration par défaut est définit dans la fonction MCBriqueCustomField_Abstract::getConfig().

La fonction sanitize_value permet de filtrer la valeur du champ afin de retourner une valeur correspondant au type attendu. Dans cet exemple nous limitons le champ à une chaine de caractères.

/wp-content/plugins/mc_briques_exemple/templates/Exemple/fields/Exemple/field.php

<?php
/**
 * Affichage du champ : Exemple
 */
if(!defined('ABSPATH'))
    exit;

if(!empty($field) && !empty($config) && !empty($fieldSettings) && isset($metas) && isset($terms)){
    $customField = MCBriques::loadBrique('CustomField');
    $fieldSettings = $customField::sanitizeFieldSettings($fieldSettings);
    $key = 'mcb_cf_'.$fieldSettings['name'];
    $fieldValue = (!empty($metas[$key]))? $metas[$key][0] : '';
    if($customField::getField($field) && $fieldValue != ''){
?>
    <div class="field">
            <span class="field_label"><?php echo esc_html($fieldSettings['label']); ?></span>
            <span class="field_value"><?php echo esc_html($fieldValue); ?></span>
    </div>
<?php
    }
}

Note

Ce template correspond à l’affichage du champ sur le site (sur l’annonce ou sur le profil de l’utilisateur)

/wp-content/plugins/mc_briques_exemple/templates/Exemple/fields/Exemple/form.php

<?php
/**
 * Affichage du champ dans un formulaire : Exemple
 */
if(!defined('ABSPATH'))
    exit;

if(!empty($field) && !empty($config) && !empty($fieldSettings) && is_array($fieldSettings) && isset($metas) && isset($terms)){
    $customField = MCBriques::loadBrique('CustomField');
    if($customField::getField($field)){
            $fieldSettings = $customField::sanitizeFieldSettings($fieldSettings);
            $key = 'mcb_cf_'.$fieldSettings['name'];

            $fieldValue = (isset($_POST[$key]))? $_POST[$key] : ((!empty($metas[$key]))? $metas[$key][0] : '');
?>
    <label for="mcb_cf_<?php echo esc_attr($fieldSettings['name']); ?>"><?php echo esc_html($fieldSettings['label']); ?></label>
    <input type="text" name="mcb_cf_<?php echo esc_attr($fieldSettings['name']); ?>" id="mcb_cf_<?php echo esc_attr($fieldSettings['name']); ?>" class="form-control" value="<?php echo esc_attr($fieldValue); ?>"<?php if(!empty($fieldSettings['required'])){ ?> required<?php } ?> />
<?php
    }
}

Note

Ce template correspond à l’affichage du champ dans un formulaire

/wp-content/plugins/mc_briques_exemple/templates/Exemple/fields/Exemple/search.php

<?php
/**
 * Affichage du champ dans une recherche : Exemple
 */
if(!defined('ABSPATH'))
    exit;

if(!empty($field) && !empty($config) && !empty($fieldSettings) && is_array($fieldSettings)){
    $customField = MCBriques::loadBrique('CustomField');
    if($customField::getField($field)){
            $fieldSettings = $customField::sanitizeFieldSettings($fieldSettings);
            $searchValue = (isset($_GET['cf_'.$fieldSettings['name']]))? $_GET['cf_'.$fieldSettings['name']] : '';
?>
    <?php if(!empty($fieldSettings['label'])){ ?><label for="cf_<?php echo esc_attr($fieldSettings['name']); ?>"><?php echo esc_attr($fieldSettings['label']); ?></label><?php } ?>
    <input type="text" name="cf_<?php echo esc_attr($fieldSettings['name']); ?>" id="cf_<?php echo esc_attr($fieldSettings['name']); ?>" class="form-control"<?php if(!empty($fieldSettings['placeholder'])){ ?> placeholder="<?php echo esc_attr($fieldSettings['placeholder']); ?>"<?php } ?> value="<?php echo esc_attr($searchValue); ?>" />
<?php
    }
}

Note

Ce template correspond à l’affichage du champ dans le formulaire de recherche

Cet exemple intègre simplement un type de champ texte (nommé Exemple) entièrement similaire au type de champ texte présent par défaut. Il est cependant possible de créer n’importe quel type de champ via ce système.

Pour plus d’informations sur les différentes fonctions disponibles, consulter la classe abstraite MCBriqueCustomField_Abstract.