J'ai créé plusieurs champs personnalisés pour mon type de message personnalisé "livres"
Il y a une case à cocher pour les langues. Chaque fois qu'une langue est cochée, plusieurs champs personnalisés pour cette langue sont ajoutés (c'est-à-dire titre, image de couverture, isbn).
Lors de l'affichage du contenu d'un "livre", j'aimerais parcourir mes champs personnalisés et afficher ceux qui appartiennent ensemble dans un panneau réductible. Voici ce que j'ai jusqu'à présent:
<?php $fields = get_field_objects();
if ($fields): ?>
<ul>
<?php
foreach ($fields as $name => $field):
if (stripos($name, 'isbn') !== false) : ?>
<button data-toggle="collapse" data-target="#demo">Deutsch/<?php echo substr($field['label'], strpos($field['label'], " ") + 1); ?></button>
<div id="demo" class="collapse">
<?php //isbn
echo $field['prepend'] . " " . $field['value']; ?> </br>
<?php echo the_field('titel_'.substr($field['label'], strpos($field['label'], " ") + 1)); ?>
</div>
<?php endif;
endforeach; ?>
</ul>
<?php endif; ?>
les boutons pour la réduction affichent les données correctes (par exemple, Deutsch/Englisch, Deutsch/Arabisch), mais le titre et le numéro ISBN appartiennent à la première langue affichée.
J'apprécierais toutes les astuces!
le var_dump () de la variable $ fields: EDIT a supprimé le var_dump car il était trop gros!
Modifier
Voici la mise à jour de mon code: Il affiche maintenant les champs et les données corrects, mais je ne sais pas comment le mettre dans le panneau réductible.
<b>Erhältlich in den folgenden Sprachausgaben:</b>
<?php
$fields = get_field_objects();
if ($fields): ?>
<br>
<?php
foreach ($fields as $name => $field): ?>
<?php //hoerprobe
if (get_field('horprobe_verfuegbar') == 1) :
if (stripos($name, 'hoerprobe') !== false) : ?>
<?php echo $field['label'];
$file = get_field($name); ?>
<audio controls>
<source src="<?php echo $file['url']; ?>">
Your browser does not support the audio tag.
</audio>
</br>
<?php endif;
else :
// echo 'false';
endif; ?>
<?php
if (stripos($name, 'isbn') !== false) : ?>
<button data-toggle="collapse" data-target="#demo">
Deutsch/<?php echo substr($field['label'], strpos($field['label'], " ") + 1); ?></button>
<?php //isbn
echo $field['prepend'] . " " . $field['value']; ?> </br>
<?php //titel
echo the_field('titel_' . substr($field['name'], strpos($field['name'], "_") + 1)); ?> </br>
<?php //coverimage
$titelbild = get_field('titelbild_' . substr($field['name'], strpos($field['name'], "_") + 1)); ?>
<?php if ($titelbild) : ?>
<img src="<?php echo $titelbild['url']; ?>" alt="<?php echo $titelbild['alt']; ?>"/>
<?php endif; ?></br>
<?php endif;
endforeach;
endif; ?>
en ajoutant ceci
<div id="demo" class="collapse">
...</div>
quel que soit le bouton sur lequel je clique, il ne fait qu'ouvrir les données de la première langue ..
Éditer 2
Le fichier audio ne fonctionne pas à l'intérieur du panneau de réduction. Voici comment cela fonctionne:
<b>Erhältlich in den folgenden Sprachausgaben:</b>
<?php
$fields = get_field_objects();
if ($fields): ?>
<br>
<?php
foreach ($fields as $name => $field): ?>
<?php //hoerprobe
if (get_field('horprobe_verfuegbar') == 1) :
if (stripos($name, 'hoerprobe') !== false) : ?>
<?php echo $field['label'];
$file = get_field($name); ?>
<audio controls>
<source src="<?php echo $file['url']; ?>">
Your browser does not support the audio tag.
</audio>
</br>
<?php endif;
else :
// echo 'false';
endif; ?>
<?php
if (stripos($name, 'isbn') !== false) : ?>
<?php $lang = substr($field['name'], strpos($field['name'], "_")); ?>
<button data-toggle="collapse" data-target="#demo<?php echo $lang ?>">
Deutsch/<?php echo substr($field['label'], strpos($field['label'], " ") + 1); ?> </button>
<div id="demo<?php echo $lang ?>" class="collapse">
Lorem ipsum dolor text....
<?php //isbn
echo $field['prepend'] . " " . $field['value']; ?> </br>
<?php //titel
echo the_field('titel_' . substr($field['name'], strpos($field['name'], "_") + 1)); ?> </br>
<?php //coverimage
$titelbild = get_field('titelbild_' . substr($field['name'], strpos($field['name'], "_") + 1)); ?>
<?php if ($titelbild) : ?>
<img src="<?php echo $titelbild['url']; ?>" alt="<?php echo $titelbild['alt']; ?>"/>
<?php endif; ?></br>
</div>
<?php endif;
endforeach;
endif; ?>
mais dès que je déplace la partie hoerprobe à l'intérieur du panneau d'effondrement, elle ne l'affiche plus.
Vous affichez les données en boucle, de sorte que tous les éléments ont le même ID div id="demo"
. Ajoutez un suffixe pour les rendre uniques. Par exemple:
$lang = substr($field['name'], strpos($field['name'], "_");
echo '<button data-toggle="collapse" data-target="#demo-'. $lang .'"> ....';
echo '<div id="demo-'. $lang .'" class="collapse"> ...</div>'
Modifier
L'audio ne fonctionne pas dans le panneau de réduction, car la clé $name
ne remplit jamais les deux conditions:
if (stripos($name, 'isbn') !== false):
if (stripos($name, 'hoerprobe') !== false)
$name
est soit hoerprobe_arabisch ou isbn_arabisch .
Essayez ce code:
if (stripos($name, 'isbn') !== false) : ?>
<?php $lang = substr($field['name'], strpos($field['name'], "_")); ?>
<button data-toggle="collapse" data-target="#demo<?php echo $lang ?>">
Deutsch/<?php echo substr($field['label'], strpos($field['label'], " ") + 1); ?> </button>
<div id="demo<?php echo $lang ?>" class="collapse">
Lorem ipsum dolor text....
<?php //isbn
echo $field['prepend'] . " " . $field['value']; ?> </br>
<?php //titel
echo the_field('titel'. $lang); ?> </br>
<?php //coverimage
$titelbild = get_field('titelbild' . $lang); ?>
<?php if ($titelbild) : ?>
<img src="<?php echo $titelbild['url']; ?>" alt="<?php echo $titelbild['alt']; ?>"/>
<?php endif; ?></br>
if (isset($fields['hoerprobe_'.$lang])) : ?>
<?php
$hoerprobe_field_name = 'hoerprobe'.$lang;
$hoerprobe_field = $fields[$hoerprobe_field_name ];
echo $hoerprobe_field['label'];
$file = get_field(hoerprobe_field_name); ?>
<audio controls>
<source src="<?php echo $file['url']; ?>">
Your browser does not support the audio tag.
</audio></br>
<?php endif;
</div>
<?php endif;