web-dev-qa-db-ja.com

多くのページに異なるサイドバーコンテンツがありますか。

私はすでに 投稿した というトピックから続けていますが、角度は異なります。できるだけ多くの情報を提供しようとしているので私と一緒に裸でください。

私のサイトの一部で、 "Quick Facts"と呼ばれる簡単なテキスト領域をたくさんの動物/ cryptid ページに追加しようと思っています。これは各動物の事実と数字のリストを提供します。

これを設定するために私が取ったステップはここにあります:

  • Functions.phpで左右のサイドバーを作成し、cryptid-sidebar-widgets-left(左側のサイドバー用)とcryptid-sidebar-widget(右側のサイドバー用)と呼びます。左側のサイドバーは、「クイックファクト」領域が行くところです。
  • Cryptofact-page.phpという名前の新しいページテンプレートを作成しました。カスタムヘッダーと2つの新しいサイドバーを取得します。
  • 各動物とワードプレスでページを作成しました。
  • テキストウィジェットを左側のサイドバーにポップして、簡単な事実を書き留めます。

結局次のようになります。

enter image description here 

もちろん、このサイドバーはすべてのページに同じテキストデータを繰り返します。代わりに各動物のページに固有のデータを表示する必要があります。

私はこれらの動物の事実ページを100+個持っていくので、この問題にどう取り組むのが最善かと思います。これが私が集めた選択肢とそれぞれがどんな問題を提示するかです。私は新しいWeb開発者なので、プロのサイトがこの問題にどう取り組むかを知りたいです。

  1. サイドバーを登録して新しいページごとにサイドバー-___。phpを作成します。 _私はfunctions.phpに戻って各クリーチャーに100以上の異なるサイドバーを登録し続けることができます。そこから私はsidebar-creaturename.phpと呼ばれる個々のphpページを作り、カスタムフィールドを使って同じテンプレートからそれらを呼び出すことができます。

    • 私が読んだあるチュートリアルでは、私はcryptofact-page.phpテンプレートに次のものを入れることができます。それから私のページのカスタムフィールドの場所に行き、私がこの動物用に作成した Key :sidebarと Value :(サイドバーの名前-___。php)を追加します。これにより、すべてのページに同じテンプレートを使用しながら、それぞれのページに異なるサイドバーを呼び出すことができます。

    <?php $sidebar = get_post_meta($post->ID, "sidebar", true); get_sidebar($sidebar); ?>

私の最後のトピックであるUser Willが、このコードを自分のページテンプレートまたは作成するサイドバーに入れることについて説明しました。そしてカスタムフィールドのアイデアを私に紹介しました。

    <?php
        var $meta = get_post_meta($post->id, "your-key", true);

        if(!empty($meta)): 
    ?>
        <aside>
            <?php echo $meta; ?>
        </aside>

    <?php endif; ?>

問題は...私はこれを追加しました、そしてそれはちょっと私のページを引き裂いた。そのため、間違った場所に追加したのか、足りないのかはわかりませんでした。誰もがこれについて拡張することができればそれは高く評価されるでしょう。私は私のcryptofact-page.phpテンプレートと私が使用するであろう潜在的なサイドバーを示すコードをこの記事の最後に追加します。

  1. ウィジェットロジックプラグイン(または同様のプラグイン)の使用:私が自分のファイルをコーディングしてこれを行うことができると思えば、プラグインを使用することはあまり好きではありません。これは私の問題を調査したときに私が見つけた提案です。つまり、このプラグインは他の各ウィジェットに追加のフィールドを追加して、その特定のウィジェットをどのページに表示するかを指定できます。

    • 私はcryptofacts-page.phpテンプレートに追加したものと同じサイドバー(cryptid-sidebar-widgets-left)にテキストウィジェットを追加します。 Text Widget領域の下には、Widget Logicを使用してis_page( 'pageid')を追加し、その動物のページのページIDを書き留めることができます。
    • 私はこのプロセスを何度も繰り返します。そのため、カスタマイザの下にあるウィジェットエリアを開いたときに、1つのサイドバーを通過する必要があるテキストウィジェットが100個以上増えました。これは実行が簡単ですが、ややcluster-fのように見えます。私はText Widgetのタイトルに "Quick Facts"とだけ書いて欲しいのですが、これはQuick Factsという名前のText Widgetをたくさん持っていて一目でそれらの違いを見分ける良い方法がないでしょう。事実を追加または変更するには、それらすべてを手動で開き、どちらが必要なクリーチャーかを判断する必要があります。
  2. 左側のサイドバーを完全に取り除きます。私はそれについて考えていましたし、左側のサイドバーを完全に取り除き、各動物のpageをWordpressで書いている間に、動物のmain content divの左に浮かぶquickfact divを追加します。これが私が最初にこれらのAnimal Factoid Pagesについて考えたときの最初のアイデアでしたが、列の追加などのさまざまなチュートリアルを研究するときには、代わりに左側のサイドバーを追加することをお勧めしました。それは私がウィジェットやサイドバーを扱う必要がないことを意味し、すべての「簡単な事実」は他のコンテンツと同じ入力領域に入ります。それはただもっと多くのdivを扱うことを意味しています(サイドバーで多くのものを扱っているので問題にはなりません)。

繰り返しますが、100ページ以上の動物ページでこれを実行するための最も効率的な方法は何だろうか。大規模なWebサイトでこれに対処するための最も一般的な方法は何ですか?

Wordpressは私にとってかなり新しいもので、昨日カスタムフィールドのアイデアが私に提示されたばかりなので、例1はカスタムフィールドについて本当に私が知っているすべてです。

私はこれを行うための他の方法を探しています、そして私はこれを正しくすることを学ぶために時間をかけて喜んでいます。これが簡単だとは思わない。非常に多くのページがあるのでそれは退屈になるでしょうが、私はただこれについて取り組むために超無関係な方法を取っているばかのように思われたくありません。

私のcryptofact-page.phpテンプレート:

get_header(); ?>

<div class="cryptid-sidebar-left">
    <ul class="cryptid-sidebar-widgets-left">
<?php if ( is_active_sidebar( 'cryptid-sidebar-widgets-left' ) ) : 
          dynamic_sidebar( 'cryptid-sidebar-widgets-left' ); endif; ?>
                </ul>
            </div>

<?php if ( have_posts() ) : ?>
    <!--if there are posts, start the loop-->
<div class="cryptid-container">
    <?php while ( have_posts() ) : the_post(); ?>
        <!--get the content template for the current post format.-->
        <?php get_template_part( 'content', get_post_format() ); ?>
    <?php endwhile; ?>


</div> <!-- .cryptid-container-->

    <?php else : ?>
    <!--If no content, get content template for 'no posts found'-->
<div class="cryptid-container">
    <?php get_template_part( 'content', 'none' ); ?>
</div>
    <?php endif; ?>
<div class="cryptid-sidebar-right"> 
    <ul class="cryptid-sidebar-widgets">
    <?php if ( is_active_sidebar( 'cryptid-sidebar-widgets' ) ) :
    dynamic_sidebar( 'cryptid-sidebar-widgets' );
endif; ?>
</ul>
</div>
<?php get_footer(); 
?>

私のサイドバー:現在、私は別のサイドバー-____。phpファイルを用意する必要はありません。それはfunctions.phpに登録してそれをテンプレートの中で呼び出すだけでうまくいくようです。しかし、私がそれを持っていた(またはこれを必要としていた)場合、おそらく次のようになります。

<?php
/**
 * Displays sidebar widgets for front page
 *
 * @since ctheme 1.0
 */
?>

<div class="cryptid-sidebar-left">
    <ul class="cryptid-sidebar-widgets-left">
        <?php if ( is_active_sidebar( 'cryptid-sidebar-widgets-left' ) ) :
    dynamic_sidebar( 'cryptid-sidebar-widgets-left' );
endif; ?>

</ul>
</div>

あなたのすべての助けとこれを読むために時間を割いてくれてありがとう。十分な情報を提供していただければ幸いです。

編集 - 潜在的な回答:

それで私は再びカスタムフィールドを読み始め、またMeta Boxをfunctions.phpにコーディングし始めました。私は休憩を取り、そして上記のExample#2Text Widget and Widget Logic Pluginに由来する簡単な解決策があることに気づきました。私はまだもっと洗練された方法でこの問題に取り組みたいと思っています、しかし私が欲しいものが起こるようにするために私がしたことをここにポストするつもりです。

#2の唯一の本当の問題は、私が見たのはCryptid左サイドバーの下のCustomizer- Widget領域を調べに行ったときに、これだけだったことです。

テキストウィジェット:簡単な事実

テキストウィジェット:簡単な事実

テキストウィジェット:簡単な事実(および上)

上で述べたように、もし私がこれらのクリーチャーのうちの1つのためにテキストデータを変更するために戻って行かなければならなかったならば、私は一目でどちらに入るべきかわからないでしょう。だから、私は単に別のウィジェットを探しに行きました。他のいくつかのテキストウィジェットを試した後、私はEnhanced Text Widgetを選びました。このウィジェットは私にウィジェットにタイトルを付けるが出力にタイトルを表示しないオプションを与えました。

私はこの生き物の名前でウィジェットのタイトルを付けました。それからテキストフィールドで、私は簡単な事実のために私がコード化した他のすべてのデータの上に単に "Quick Facts"というタイトルをウィジェットに与えました。私はそれから、そのタイトルに、他のウィジェットのタイトルと同じdivを与えました。私の場合、それは "widgettitle"と呼ばれました。

<div class="widgettitle"><h2>Quick Facts</h2></div>

それはちょっとフォントのサイズをめちゃくちゃにしました、しかし、スタイリングの残りはそこにあります。 style.cssファイルで簡単に修正できます。

それから、ウィジェットロジックを使用しました。これは、各ウィジェットの下部に追加のフィールドを追加するものです。そのため、この領域に次のように入力すると、そのページにのみ表示されます。

is_page('pageid')

最後に、ウィジェットのカスタマイズ領域があります。この領域は次のようになります。

強化テキスト:ネス湖

強化されたテキスト:Ogopogo

強化テキスト:ビッグフット(およびそれ以降)

それぞれが内部に独自の素早い事実を持っているので、今ではどのクリーチャーのウィジェットが以前のものに対して対比されているのかをすぐに確認できます。

私はもっ​​と洗練された道をたどるべきであるように、このようにそれをするのはちょっと大変な気がしますが、それはうまくいき、それはかなりきれいに見えます。サイトがこのx100をどの程度うまく処理できるかはわかりませんが、処理がそれほど難しい、または重くなるようには思われません。

また、私はただ気付いたことがあります...クイックファクト領域の上の各動物の場所のための小さな地図が欲しいなら(画像に見られるように)私は同様のことをしなければなりません。私はそれにも取り組まなければならないでしょう...しかし私は代わりにページの内容の代わりに地図を貼り付けるかもしれません。これは、詰め込まれたサイドバーの1つになります。

さらなる助けは大歓迎です!

最終編集と解決策 _ Miloに感謝します!

以下にMiloが受け入れた答えを取って、私はカスタムフィールドを完全に実装することにしました。私は自分自身のメタボックスを作成するという問題を経験しましたが、それはかなりまともに出てきました。私は Advanced Custom Fields plugin に戻ってしまったので、彼らのメタボックスはもっと良かったです。私もプラグインを必要としませんが、将来もっと複雑なものに使用したい場合に備えて、私はそれを保ちました。 高度なカスタムフィールドプラグインの使用 (またはプラグインなしのカスタムフィールドボックス)カスタムフィールドキーcryptid_post_classを作成しました。

その後、サイドバーを削除するようにページテンプレート(cryptofacts-page.php)を変更し、その代わりにカスタムフィールドからデータを取得します。それは以前からサイドバーで表示されるように適切なラッパーを使用することが不可欠です(Miloisawesome)。

get_header(); ?>

<div class="cryptid-sidebar-left">
<ul class="cryptid-sidebar-widgets-left">
    <?php
    $meta = get_post_meta(get_the_ID(), "cryptid_post_class", true);
    if( !empty($meta) ): 
    ?>
    <li>
        <?php echo $meta; ?>
    </li>
    <?php
    endif;
    ?>
</ul>
</div>


<?php if ( have_posts() ) : ?>
<!--if there are posts, start the loop-->
<div class="cryptid-container">
<?php while ( have_posts() ) : the_post(); ?>
    <!--get the content template for the current post format.-->
    <?php get_template_part( 'content', get_post_format() ); ?>
<?php endwhile; ?>

これがプロセスを説明するための写真です。

  1. 適切なラッパーを使ってテンプレートを設定する

enter image description here  2. カスタムフィールド領域の設定

enter image description here  3. これで遊んでいる間はバックアップテンプレートを使用していたので、最終結果からいくつかのcss調整を引いたものです

enter image description here 

うまくいけば、これは他の初心者のWordPress開発者が物事をより明確にし、WPのかなり素晴らしいカスタムフィールドの一部に近づくのを助けるでしょう!

5
Nimara

couldサイドバーを動的に登録します。サイドバーを登録すると、すべての動物のページを照会し、すべてのページをループし、各ページに一意のサイドバーを登録できます。ページを追加すると、そのためのサイドバーが自動的に作成されます。

ただし、-それはたくさんのサイドバーです。ページコンテンツと密接に結び付けられたものについては、事前定義されたフィールドを含む カスタムメタボックス を介してカスタムフィールドで処理します。

ポストメタの使用がサイトのレイアウトを妨害した理由については、おそらくマークアップ/スタイリングの問題にすぎません。最も簡単な方法は、サイドバーとテキストウィジェットでレイアウトを正しく表示し、ページを表示するときに生成されたマークアップをコピーし、それをカスタムフィールドのラッパーマークアップとして使用することです。上記のテンプレートを見ると、ウィジェットは<li>内で<ul>sとして表示されるので、投稿メタを追加するときにそれを試してください。

<div class="cryptid-sidebar-left">
    <ul class="cryptid-sidebar-widgets-left">
        <?php
        $meta = get_post_meta(get_the_ID(), "your-key", true);
        if( !empty($meta) ): 
        ?>
        <li>
            <?php echo $meta; ?>
        </li>
        <?php
        endif;
        ?>
    </ul>
</div>
5
Milo

私はあなたが言及されているもののようにたくさん聞こえる問題のあるサイトを持っていました。プラグインの "カスタムサイドバー"を使用しました。特定のページにサイドバーを作成し、設定されていない場合はデフォルトでサイドバーを作成することができます。これはあなたが探しているものですか?

0
oompahlumpa