Наличие разного содержимого боковой панели для МНОГИХ страниц?


Я продолжаю тему, которую я уже опубликовал , но с другой точки зрения. Пожалуйста, поделитесь со мной, как я стараюсь предоставить как можно больше информации.

Я хочу добавить простую текстовую область под названием "Краткие факты" к куче страниц животных/криптидов в одной части моего сайта. Это даст список фактов и цифр для каждого животного.

Вот шаги, которые я предпринял для того, чтобы установить это вверх:

  • Создал левую и правую боковые панели в functions.php, называемый cryptid-боковая панель-виджеты-слева (для левой боковой панели) и cryptid-боковая панель-виджеты (для правой боковой панели). На левой боковой панели находится область "Краткие факты".
  • Создан новый шаблон страницы под названием cryptofact-page.php . Он захватывает пользовательский заголовок, а также две новые боковые панели.
  • Создавал страницы в wordpress с каждым отдельным животным.
  • Вставьте текстовый виджет слева боковую панель и начните записывать краткие факты.

В итоге это выглядит так:

enter image description here

Проблема в том, что, конечно, эта боковая панель повторяет одни и те же текстовые данные для всех страниц. Вместо этого мне нужно, чтобы он отображал уникальные данные для страницы каждого животного.

Мне интересно, как лучше всего решить эту проблему, потому что у меня будет более 100+ этих страниц с фактами о животных. Вот варианты, которые я собрал, и какие проблемы у каждого один представляет. Я новый веб-разработчик, поэтому я хочу знать, как профессиональный сайт будет решать эту проблему.

  1. Регистрируйте боковые панели и создавайте sidebar-___.php для каждой новой страницы: Я могу вернуться в functions.php и продолжайте регистрировать более 100 различных боковых панелей для каждого существа. Оттуда я могу создавать отдельные php-страницы под названием sidebar-creaturename.php и вызывайте их из одного и того же шаблона, используя настраиваемые поля.

    • В одном учебнике, который я прочитал, я могу поместите следующее в мой cryptofact-page.php шаблон. Затем перейдите в пользовательское поле на моих страницах и добавьте Ключ:боковая панель и Значение : (Имя sidebar-___.php ), который я создал для этого животного. Это позволяет мне сохранять один и тот же шаблон для всех страниц, но для каждой из них требуется отдельная боковая панель.

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

Пользователь из моей последней темы расскажет мне о том, как вставить этот код в шаблон моей страницы или боковую панель, которую я бы сделал. И познакомил меня с идеей пользовательских полей.

    <?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. Использование плагина логики виджетов (или аналогичного плагина): Я не слишком люблю используя плагин, когда я предположительно могу сделать это, написав свои собственные файлы. Это было предложение, которое я нашел, исследуя свою проблему. Короче говоря, этот плагин добавляет дополнительное поле к каждому другому виджету, которое может указывать, на какой странице показывать этот конкретный виджет.

    • Я добавляю Текстовый виджет на одну боковую панель (cryptid-боковая панель-виджеты-слева), которую я добавил в cryptofacts-page.php шаблон. В области текстового виджета я могу использовать логику виджета для добавления is_page('pageid') и запишите идентификатор страницы для страницы этого животного.
    • Я повторяю этот процесс снова и снова, так что теперь, когда я открываю область виджетов под Настройщиком, теперь есть более 100 текстовых виджетов, которые мне нужно просмотреть для этой боковой панели. Хотя это легко выполнить, это также немного похоже на кластер-f. Я хочу, чтобы в заголовке текстового виджета было написано только "Быстрые факты", но это означало бы, что у меня было бы много текстовых виджетов с именем Быстрые факты без хорошего способа определите разницу между ними с первого взгляда (например, допустим, мне нужно вернуться назад и добавить или изменить факты, мне нужно будет вручную открыть их все и выяснить, какое существо я хочу).
  2. Полностью избавляюсь от левой боковой панели. Я подумал об этом и, полагаю, я мог бы полностью избавиться от левой боковой панели, и пока я пишу страницу каждого животного в wordpress, я могу добавить раздел быстрого действия, который плавает слева от страницы. животное основное содержание div. Это была моя первоначальная идея, когда я впервые подумал об этих страницах с фактоидами животных, Но когда я начал изучать различные учебные пособия по добавлению столбцов и т. Д., Многие из них предложили вместо этого просто добавить левую боковую панель. Это означало бы, что мне не придется иметь дело с виджетами или боковыми панелями, и все "краткие факты" будут помещены в ту же область ввода, что и остальной контент. Это просто означает иметь дело с гораздо большим количеством дивов (что не является проблемой, так как я имею дело со многими в боковая панель как она есть).

Еще раз, мне интересно, какой был бы наиболее эффективный способ сделать это для более чем 100 отдельных страниц с животными? Какова наиболее распространенная практика решения этой проблемы для большого веб-сайта?

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(); 
?>

Моя боковая панель: В настоящее время мне не нужно иметь отдельную sidebar-____.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>

Большое спасибо за вашу помощь и за то, что нашли время прочитать это. Я надеюсь, что предоставил достаточно информации, чтобы мне могли помочь в этом.

РЕДАКТИРОВАТЬ - Потенциальный ответ:

Поэтому я снова начал читать о пользовательских полях, а также начал кодировать мета-поле в свой functions.php . Я сделал перерыв, а затем понял, что существует простое решение, вытекающее из Примера № 2 выше: Текстовый виджет и плагин логики виджетов. Я все еще хочу решить эту проблему более изощренным способом, но я опубликую здесь то, что я сделал, чтобы то, что я хочу, произошло.

Единственная реальная проблема с #2 заключалась в том, что, когда я зашел в область виджетов-настройщиков, под левой боковой панелью Cryptid я увидел только следующее:

Текстовый виджет: Краткие факты

Текстовый виджет: Краткие факты

Текстовый виджет: Краткие факты (и далее)

Как указано выше, если бы мне пришлось вернитесь, чтобы изменить текстовые данные для одного из этих существ, я бы не знал, к какому из них обратиться, просто взглянув. Поэтому я просто отправился на поиски другого виджета. Попробовав несколько других текстовых виджетов, я остановился на Расширенном текстовом виджете. Этот виджет дал мне возможность озаглавить виджет, но не показывать заголовок в выводе.

Я назвал виджет именем существа. Затем в текстовом поле я просто дал виджету заголовок "Краткие факты" над всеми другие данные я закодировал для кратких фактов. Затем я дал этому названию тот же div, что и у остальных названий виджетов, в моем случае он назывался "widgettitle"

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

Это немного испортило размер шрифта, но остальная часть стиля есть. Я могу легко исправить это в своем файле style.css.

Затем я использовал логику виджета, которая добавляет дополнительное поле в нижней части каждого виджета. Поэтому в этой области я могу ввести следующее, чтобы оно отображалось только для этого страница:

is_page('pageid')

В итоге у нас есть область настройки виджета, которая теперь выглядит так:

Расширенный текст: Лох-Несс

Расширенный текст: Ogopogo

Расширенный текст: Снежный человек (и далее)

Каждый со своими собственными краткими фактами внутри, и теперь я могу быстро увидеть, какой виджет существа это по сравнению с предыдущим.

Мне кажется, что делать это таким образом немного глупо, как будто я должен идти более сложным путем, но это работает, и это кажется довольно чистым. Я не уверен, как что ж, сайт справится с этим x100, но не похоже, что это должно быть так сложно или тяжело обрабатывать.

Также я только что понял...Я должен сделать что-то подобное, если бы мне нужна была небольшая карта для каждого местоположения животного над областью кратких фактов (как показано на изображении). Мне тоже придется заняться этим... но вместо этого я могу просто вставить карту в содержимое страницы. Это будет одна набитая боковая панель, как она есть.

Мы будем очень признательны за дальнейшую помощь!

ОКОНЧАТЕЛЬНОЕ РЕДАКТИРОВАНИЕ И РЕШЕНИЕ: Спасибо Майло!

Приняв принятый ответ Майло ниже, я решил полностью реализовать пользовательские поля. Я прошел через трудности, создав свой собственный мета-бокс, который вышел довольно прилично. В итоге я вернулся к Расширенному плагину пользовательских полей, потому что их мета-поля были приятнее. Мне даже не нужен плагин, но я сохранил его на случай, если захочу использовать его для чего-то более сложного в будущем. С помощью Плагин расширенных настраиваемых полей (или поле Настраиваемые поля без плагина) Я создал пользовательский ключ поля 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!

Author: Community, 2015-11-12

2 answers

Вы могли бы динамически регистрировать боковые панели. Когда вы регистрируете боковые панели, вы можете запросить все свои страницы с животными, просмотреть все страницы и зарегистрировать уникальную боковую панель для каждой страницы. Добавление страницы автоматически создаст для нее боковую панель.

Однако - это много боковых панелей. Для чего-то тесно связанного с содержимым страницы, я бы предпочел обрабатывать его с помощью пользовательских полей с помощью пользовательского мета-поля, которое содержало ваши предопределенные поле(поля).

Что касается того, почему использование вами мета-постов нарушило макет вашего сайта, вероятно, это просто проблема разметки/стиля. Простейший способ может заключаться в том, чтобы правильно оформить макет с помощью боковой панели и текстового виджета, затем скопировать разметку, созданную при просмотре страницы, и использовать ее в качестве разметки оболочки для пользовательских полей. Глядя на ваш шаблон выше, виджеты будут отображаться как <li> в <ul>, поэтому попробуйте сделать это при добавлении мета-сообщения:

<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
Author: Milo, 2015-11-12 18:12:24

У меня был сайт с проблемой, которая очень похожа на ту, о которой вы упомянули. Я использовал плагин "пользовательские боковые панели", я полагаю, что он был вызван, в котором мне было бы предложено создать боковую панель на определенной странице и по умолчанию, если она не установлена. Это то, что вы ищете?

 0
Author: oompahlumpa, 2015-11-12 22:05:02