it-swarm.com.de

Best Practice-Methode zum Implementieren von benutzerdefinierten Abschnitten in ein WordPress-Thema

Ich habe Probleme, herauszufinden, wie ich benutzerdefinierte Abschnitte in einem WordPress-Theme am besten implementieren kann. Zum Beispiel mache ich ein Thema, das vier gekennzeichnete Abschnitte auf der homepage hat. Diese Abschnitte befinden sich in einem eigenen Bereich, der vom Seiteninhalt getrennt ist.

Ich weiß, dass dies durch Hinzufügen von vier Widget-Positionen oder einer Widget-Position und Hinzufügen von vier Widgets durch den Benutzer erreicht werden kann. Sie können auch die vier Bereiche in das Bedienfeld für Designoptionen einfügen oder versuchen, ein Seitenerstellungs-Plug-in zu verwenden. Ich habe mich gefragt, ob jemand einen Rat hat, welche Methode die beste ist und warum? Oder irgendwelche Vorschläge zu alternativen Methoden?

Vielen Dank,

David

4
David

Das grundlegende Paradigma in WordPress ist der Callback-Handler. Aktionen, Filter, Widgets, Metaboxen usw. werden ausgeführt, indem bestimmte Callback-Handler für einige Trigger registriert werden. Dies ist nicht immer der eleganteste Weg, aber der, den jeder Anfänger muss lernen muss. Halten Sie sich also an dieses Paradigma, wenn Sie nicht sicher sind, was Sie tun sollen.

Bieten Sie also vier Aktionen an:

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

Dann können Sie oder ein Entwickler von Drittanbietern mit add_action() einen Rückruf für diese Aktionen registrieren.

Dies könnte verbessert werden: Verwenden Sie ein Präfix, um Kollisionen mit Plugins oder Änderungen am WordPress-Kern zu vermeiden, und führen Sie ein Array aus, um den Code kompakt und lesbar zu halten.

$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" );

Dies ist möglicherweise bereits zu lang für eine einfache Vorlage, sodass Sie den Code in eine benutzerdefinierte Funktion einkapseln und diese für eine andere benutzerdefinierte Aktion registrieren können:

// 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;
}

Jetzt können Sie einen benutzerdefinierten Container nur drucken, wenn Rückrufe registriert sind. Entwickler von Drittanbietern können ihre eigenen Rückrufe registrieren oder Ihre entfernen. Ihr front-page.php benötigt nur eine zusätzliche Codezeile.

7
fuxia