wordpressor
  • 0
Эксперт

Скрыть/отключить боковую панель с помощью шорткода?

  • 0

Вопрос довольно простой, но на самом деле сложный.

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

Это выглядит как:

<div id="<?php echo get_option('sidebar-layout');" ?>
 <div id="content">
   Some content
   [myshortcode]
 </div>
 <div id="sidebar">
   Sidebar 
 </div>
</div>

Опция sidebar-layout может иметь три значения — left, right и none. И ни один не по умолчанию. Все они устанавливаются через метабокс под постом/страницей.

Самая большая проблема здесь заключается в том, что когда пользователь выбирает левый — первый div получает «левый» класс, а все остальное основано на этом идентификаторе, например.

#left #content {
     style;
}

А когда он берет «правильно», то применяется другой стиль:

#right #content {
     another style;
}

Таким образом, мой «myshortcode» должен в основном изменить идентификатор родительского DIV.

Есть идеи, как этого добиться? Я считаю, что мой шорткод будет выполнен ПОСЛЕ идентификатора div.

Share
  1. Можете ли вы объяснить связь между вашим шорткодом и вашими sidebar-layout настройками? Судя по тому, как вы это описываете, вы используете метаданные поста. В вашем примере кода используется get_option() which читает параметры всего сайта.

    • 0
  2. Используйте этот код, чтобы повторить идентификатор вашего div

    <?php $sidebar_layout = get_post_meta($post->ID, 'sidebar-layout', $single = true); ?>
    <div id="<?php echo $sidebar_layout ?>">
        <div class="content">
             ...
        </div>
        <div class="sidebar">
        ...
        </div>
    </div>
    

    Если вы хотите применить стили в соответствии с выбором, сделанным пользователем, измените таблицу стилей следующим образом:

    #left .content{ ... }
    #left .sidebar{ ... }
    #right .content{ ... }
    #right .sidebar{ ... }
    #none .content{ ... }
    #none .sidebar{ ... }
    

    Надеюсь, это поможет.

    • 0

Оставить ответ

You must login to add an answer.