Наличие разного содержимого боковой панели для МНОГИХ страниц?
Я продолжаю тему, которую я уже опубликовал , но с другой точки зрения. Пожалуйста, поделитесь со мной, как я стараюсь предоставить как можно больше информации.
Я хочу добавить простую текстовую область под названием "Краткие факты" к куче страниц животных/криптидов в одной части моего сайта. Это даст список фактов и цифр для каждого животного.
Вот шаги, которые я предпринял для того, чтобы установить это вверх:
- Создал левую и правую боковые панели в functions.php, называемый cryptid-боковая панель-виджеты-слева (для левой боковой панели) и cryptid-боковая панель-виджеты (для правой боковой панели). На левой боковой панели находится область "Краткие факты".
- Создан новый шаблон страницы под названием cryptofact-page.php . Он захватывает пользовательский заголовок, а также две новые боковые панели.
- Создавал страницы в wordpress с каждым отдельным животным.
- Вставьте текстовый виджет слева боковую панель и начните записывать краткие факты.
В итоге это выглядит так:
Проблема в том, что, конечно, эта боковая панель повторяет одни и те же текстовые данные для всех страниц. Вместо этого мне нужно, чтобы он отображал уникальные данные для страницы каждого животного.
Мне интересно, как лучше всего решить эту проблему, потому что у меня будет более 100+ этих страниц с фактами о животных. Вот варианты, которые я собрал, и какие проблемы у каждого один представляет. Я новый веб-разработчик, поэтому я хочу знать, как профессиональный сайт будет решать эту проблему.
-
Регистрируйте боковые панели и создавайте 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 шаблон и потенциальная боковая панель, которую я буду использовать.
-
Использование плагина логики виджетов (или аналогичного плагина): Я не слишком люблю используя плагин, когда я предположительно могу сделать это, написав свои собственные файлы. Это было предложение, которое я нашел, исследуя свою проблему. Короче говоря, этот плагин добавляет дополнительное поле к каждому другому виджету, которое может указывать, на какой странице показывать этот конкретный виджет.
- Я добавляю Текстовый виджет на одну боковую панель (cryptid-боковая панель-виджеты-слева), которую я добавил в cryptofacts-page.php шаблон. В области текстового виджета я могу использовать логику виджета для добавления is_page('pageid') и запишите идентификатор страницы для страницы этого животного.
- Я повторяю этот процесс снова и снова, так что теперь, когда я открываю область виджетов под Настройщиком, теперь есть более 100 текстовых виджетов, которые мне нужно просмотреть для этой боковой панели. Хотя это легко выполнить, это также немного похоже на кластер-f. Я хочу, чтобы в заголовке текстового виджета было написано только "Быстрые факты", но это означало бы, что у меня было бы много текстовых виджетов с именем Быстрые факты без хорошего способа определите разницу между ними с первого взгляда (например, допустим, мне нужно вернуться назад и добавить или изменить факты, мне нужно будет вручную открыть их все и выяснить, какое существо я хочу).
Полностью избавляюсь от левой боковой панели. Я подумал об этом и, полагаю, я мог бы полностью избавиться от левой боковой панели, и пока я пишу страницу каждого животного в 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; ?>
Вот несколько картинок, иллюстрирующих процесс.
- Настройте шаблон с помощью соответствующих оболочек
2. Настройка области настраиваемых полей
3. Конечный результат минус некоторые настройки css, так как я использовал шаблон резервного копирования во время игры с этим
Надеюсь, это поможет любым другим начинающим разработчикам WordPress прояснить ситуацию и приблизиться к довольно удивительной части пользовательских полей WP!
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>
У меня был сайт с проблемой, которая очень похожа на ту, о которой вы упомянули. Я использовал плагин "пользовательские боковые панели", я полагаю, что он был вызван, в котором мне было бы предложено создать боковую панель на определенной странице и по умолчанию, если она не установлена. Это то, что вы ищете?