web-dev-qa-db-fra.com

Meilleure pratique pour implémenter des sections personnalisées dans un thème WordPress

Je n'arrive pas à trouver le meilleur moyen d'implémenter des sections personnalisées dans un thème WordPress. Par exemple, je crée un thème qui comportera quatre sections en vedette sur la page d'accueil. Ces sections seront dans leur propre zone, séparée du contenu de la page.

Je sais que cela pourrait être fait en ajoutant quatre positions de widget, ou une position de widget et en faisant en sorte que l'utilisateur ajoute quatre widgets. Vous pouvez également ajouter les quatre zones dans le panneau d’options du thème ou même essayer d’utiliser un plugin de création de page. Je me demandais si quelqu'un a des conseils sur la meilleure méthode et pourquoi? Ou des suggestions sur des méthodes alternatives?

Merci,

David

4
David

Le paradigme de base dans WordPress est le gestionnaire de rappel. Actions, filtres, widgets, métaboxes, etc.… tout s’exécute en enregistrant des gestionnaires de rappel spécifiques pour certains déclencheurs. Ce n’est pas toujours le moyen le plus élégant, mais celui que chaque débutant doit apprend, alors tenez-vous-en à ce paradigme chaque fois que vous ne savez pas quoi faire.

Alors proposez quatre actions:

do_action( 'home_primary_custom' );
do_action( 'home_secondary_custom_1' );
do_action( 'home_secondary_custom_2' );
do_action( 'home_secondary_custom_3' );

Ensuite, vous ou un développeur tiers pouvez enregistrer un rappel pour ces actions avec add_action().

Cela pourrait être amélioré: utilisez un préfixe pour éviter les collisions avec les plugins ou les modifications principales de WordPress, et parcourez un tableau pour que le code reste compact et lisible.

$prefix = get_stylesheet();

$custom_actions = array (
    'home_primary_custom',
    'home_secondary_custom_1',
    'home_secondary_custom_2',
    'home_secondary_custom_3'
);

foreach ( $custom_actions as $custom_action )
    do_action( "$prefix_$custom_action" );

Cela peut déjà être trop long pour un modèle ordinaire, vous pouvez donc encapsuler le code dans une fonction personnalisée et l'enregistrer pour une autre action custom:

// front-page.php
do_action( get_stylesheet() . '_custom_front_actions' );

// functions.php

add_action( get_stylesheet() . '_custom_front_actions', 'custom_front_actions' );

/**
 * Execute custom front actions and print a container if there are any callbacks registered.
 *
 * @wp-hook get_stylesheet() . '_custom_front_actions'
 * @return bool
 */
function custom_front_actions()
{
    $has_callbacks  = FALSE;
    $prefix         = get_stylesheet();

    $custom_actions = array (
        'home_primary_custom',
        'home_secondary_custom_1',
        'home_secondary_custom_2',
        'home_secondary_custom_3'
    );

    // Are there any registered callbacks?
    foreach ( $custom_actions as $custom_action )
    {
        if ( has_action( "$prefix_$custom_action" ) )
        {
            $has_callbacks = TRUE;
            break;
        }
    }

    // No callbacks registered.
    if ( ! $has_callbacks )
        return FALSE;

    print '<div class="' . esc_attr( "$prefix-custom-front-box" ) . '">';

    foreach ( $custom_actions as $custom_action )
        do_action( "$prefix_$custom_action" );

    print '</div>';

    return TRUE;
}

Vous pouvez maintenant imprimer un conteneur personnalisé uniquement si des rappels sont enregistrés. Les développeurs tiers peuvent enregistrer leurs propres rappels ou supprimer les vôtres. Votre front-page.php n'a besoin que d'une ligne de code supplémentaire.

7
fuxia