web-dev-qa-db-ja.com

カスタムセクションをWordPressテーマに実装するためのベストプラクティス

WordPressテーマにカスタムセクションを実装するための最良の方法を見つけ出すのに問題があります。たとえば、私はホームページに4つの特集セクションを持つことになるテーマを作っています。これらのセクションは、ページのコンテンツとは別に、独自の領域にあります。

私はこれを4つのウィジェット位置、または1つのウィジェット位置を追加してユーザーに4つのウィジェットを追加さ​​せることによって行うことができることを知っています。テーマオプションパネルに4つの領域を追加することも、ページビルダープラグインを試して使用することもできます。誰がどの方法が最善か、そしてその理由について何かアドバイスがあるのではないかと思いました。それとも他の方法についての提案はありますか?

ありがとう、

ダビデ

4
David

WordPressの基本パラダイムは、コールバックハンドラーです。アクション、フィルター、ウィジェット、メタボックスなど…一部のトリガーに特定のコールバックハンドラーを登録することですべてが実行されます。これは常に最もエレガントな方法ではありませんが、初心者必須を学ぶ方法なので、何をすべきかわからないときはいつでもそのパラダイムに固執してください。

4つのアクションを提供します。

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

その後、あなたまたはサードパーティの開発者は、add_action()を使用してこれらのアクションのコールバックを登録できます。

これは改善される可能性があります:プラグインまたはWordPressコアの変更との衝突を防ぐためにプレフィックスを使用し、配列を実行してコードをコンパクトで読みやすいものにします。

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

さて、これは既にプレーンなテンプレートには長すぎるかもしれないので、カスタム関数にコードをカプセル化し、それをanotherカスタムアクションに登録できます:

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

登録されたコールバックがある場合にのみ、カスタムコンテナを印刷できるようになりました。サードパーティの開発者は、独自のコールバックを登録したり、コールバックを削除したりできます。 front-page.phpに必要なコードは1行だけです。

7
fuxia