Jak utworzyć różne edytowalne sekcje na stronie wordpress?

Buduję mój pierwszy motyw na WordPress i napotkałem problem podczas dodawania treści do różnych sekcji.

Mój HTML jest trochę tak,

<div id="maintext">
   <-- Text -->
</div>
<div id="products">
   <-- Text and Images -->
</div>
<div id="about_company">
   <-- Text boxes -->
</div>

Jak upewnić się, że zawartość dodana przez edytor wordpress podlega odpowiednim divs ? Dla" maintext " div załaduję zawartość z samej strony, ale jak dodać treść do pozostałych 2 divów dynamicznie ?

Szukałem na kilku forach i wielu sugerowało dodanie treści za pomocą widgety, czy jest jakiś sposób, aby można to zrobić bez użycia widgetów ?

Każda pomoc będzie mile widziana.
Author: Vinith Almeida, 2013-09-05

6 answers

Niestety dodawanie wielu edytowalnych pól na jednej stronie nie jest szczególnie łatwe przy użyciu Wordpress sam w sobie.

Wielu programistów WP, których znam (w tym ja), polega na wtyczce Advanced Custom Fields plugin dla dodatkowych pól zawartości.

Kroki, aby tak się stało:

1) Zainstaluj wtyczkę ACF.
2) w obszarze Ustawienia ACF utwórz nowe pola.
3) Przypisz nowe pola do wyświetlenia dla określonej strony lub zestawu stron.
4) Zaktualizuj swój page-szablon dla danej strony(stron), dzięki któremu wyświetlane są nowe pola.

Na przykład możesz utworzyć zestaw standardowych pól wysiwyg, a następnie przypisać je do strony "przegląd". Nazwijmy te pola: main_text, products_info i about_company. Po utworzeniu i przypisaniu pól do strony, podczas edytowania tej strony dodatkowe pola będą dostępne do edycji.

Aby nowe pola były widoczne dla odwiedzających, muszą zostać dodane do używanego szablonu strony na Twoją stronę przeglądową. Kod może być coś takiego:

<div id="maintext">
   <!-- Text -->
   <?php if(get_field('main_text')){ //if the field is not empty
        echo '<p>' . get_field('main_text') . '</p>'; //display it
    } ?>
</div>
<div id="products">
   <!-- Text and Images -->
   <?php if(get_field('products_info')){ //if the field is not empty
        echo '<p>' . get_field('products_info') . '</p>'; //display it
    } ?>
</div>
<div id="about_company">
   <!-- Text boxes -->
   <?php if(get_field('about_company')){ //if the field is not empty
        echo '<p>' . get_field('about_company') . '</p>'; //display it
    } ?>
</div>

Istnieje wiele dobrych przykładów tutaj . Jeśli czujesz się naprawdę ambitny, zamiast zainstalować wtyczkę, możesz nawet włączyć ACF bezpośrednio w swoim motywie .

 73
Author: metaColin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-11 18:12:31

Masz trzy opcje wierzę:

  1. Utwórz obszar widżetu, w którym możesz wyświetlać zawartość w widżecie tekstowym: http://codex.wordpress.org/Function_Reference/register_sidebar
  2. Stwórz szablon, w którym następnie uzyskasz zawartość innej strony: http://codex.wordpress.org/Page_Templates#File_Folders
  3. Utwórz nowe pole meta dla wszystkich stron: http://codex.wordpress.org/Function_Reference/add_meta_box

Wierzę, że to, czego szukasz, to opcja 2. Pozostałe są bardziej zorientowane na witrynę, jeśli chcesz, aby dodatkowa zawartość pojawiała się na każdej stronie.

 5
Author: user2019515,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-05 07:36:10
<div id="maintext">
   <?php the_content(); ?>
</div>
<div id="products">
   <?php // echo wp function to get product data; ?>
</div>
<div id="about_company">
   <?php // echo wp function to get about companydata; ?>
</div>
 4
Author: Manish,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-05 09:25:44

Jeśli piszesz motyw, może chciałbyś rozważyć użycie frameworka WordPress, aby nie musieć zaczynać od zera.

Jeśli tak nie jest, pomyśl o użytkowniku końcowym. Jak będą dodawać sekcje do stron i postów? Czy będą musieli przemieszczać się między miejscami w interfejsie WordPress, czy wolą krótkie kody użytkowników?

Moim zaleceniem jest zbudowanie wtyczki, która renderuje sekcję w treści dokumentu. Lub zawartość widgetu, jeśli jest to case.

Napisałem mały fragment kodu, aby zilustrować, jak można to osiągnąć, a także dlatego, że potrzebuję go teraz: D. możesz go znaleźć na GitHubie tutaj https://github.com/lionpage/Front-Office-Document-Sections

Hope this helps

 2
Author: Page Carbajal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-20 04:52:36

Natknąłem się na ten problem już kilka razy, i chociaż pytanie ma 3 lata, myślę, że nadal jest raczej aktualne. I ' ve succesfully used the Multiple Content Blocks plugin sometimes now:

Https://ltz.wordpress.org/plugins/multiple-content-blocks/

Po zainstalowaniu wtyczki możesz po prostu umieścić the_block w szablonie:

<div id="maintext">
   <?php the_content(); ?>
</div>
<div id="products">
   <?php the_block('products') ?>
</div>
<div id="about_company">
   <?php the_block('company') ?>
</div>
 0
Author: Grimace of Despair,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-24 20:34:47

Zmagał się z tym i nie chciał używać wtyczki. Jedyną natywną opcją WordPressa, którą znalazłem, było użycie niestandardowych pól. To działa, ale tylko dla tekstu i jest dość uciążliwe.

Inną opcją bez wtyczki jest po prostu użycie HTML w edytorze Wordpress, ale jest to oczywiście dalekie od ideału.

W końcu się poddałem i zdecydowałem się na wtyczkę Advanced Custom Fields.

 0
Author: kregus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-20 12:44:48