noni71rus 157 Posted April 23, 2015 Report Share Posted April 23, 2015 Приветствую всех. На сайте организован вывод иконок через доп. поля таким кодом <i class="fa <?php echo types_render_field( "dush" , array ( "argument1" => "value1")); ?>" title="Душ"></i> Что написать, чтобы поле выводилось только если заполнено? Используется плагин Types - Complete Solution for Custom Fields and Types для Wordpress. Link to post Share on other sites
saskozp 205 Posted April 23, 2015 Report Share Posted April 23, 2015 зачем так сложно, еще и с плагином? вставляете код там где нужно выводить доп поле <?php $my_meta = get_post_custom_values( 'pole', $ID ); if ( $my_meta) { echo 'Источник: '; foreach ( $my_meta as $val_key => $val_val ) echo $val_val; } ?> и никаких заморочек ) campusboy 1 Link to post Share on other sites
noni71rus 157 Posted April 23, 2015 Author Report Share Posted April 23, 2015 зачем так сложно, еще и с плагином? вставляете код там где нужно выводить доп поле <?php $my_meta = get_post_custom_values( 'pole', $ID ); if ( $my_meta) { echo 'Источник: '; foreach ( $my_meta as $val_key => $val_val ) echo $val_val; } ?> и никаких заморочек ) На сколько я понимаю, если поле 'pole' заполнено, то должна выводиться надпись "Источник:", верно? Link to post Share on other sites
saskozp 205 Posted April 23, 2015 Report Share Posted April 23, 2015 На сколько я понимаю, если поле 'pole' заполнено, то должна выводиться надпись "Источник:", верно? да, и содержимое доп поля 'pole', которое вы заполняете при публикации записи тьфу, чето я на аброкадабил )) ну вы поняли, код работает отлично, вставляю с его помощью рекламные заметки ниже основного контента. Link to post Share on other sites
emagstyle 0 Posted July 16, 2015 Report Share Posted July 16, 2015 Приветствую! Я также пользуюсь types для создания полей. При выводе массива значений поля выводится такая ерунда "a:1:{s:64:"wpcf-fields-checkboxes-option-3fb7583d1954c005dd886d4706541dca-1";a:1:{i:0;s:16:"Квартира";}}". Массив создан с помощью чекбоксов в админке ( в карточке услуги). Перепробовал все варианты с использованием get_post_... и ничего не получается. Одиночные значения выводит нормально, а массивы не хочет. Может подскажите как решить проблему с выводом на сайт значений из массива? Link to post Share on other sites
VIP campusboy 912 Posted July 16, 2015 VIP Report Share Posted July 16, 2015 Приветствую! Я также пользуюсь types для создания полей. При выводе массива значений поля выводится такая ерунда "a:1:{s:64:"wpcf-fields-checkboxes-option-3fb7583d1954c005dd886d4706541dca-1";a:1:{i:0;s:16:"Квартира";}}". Массив создан с помощью чекбоксов в админке ( в карточке услуги). Перепробовал все варианты с использованием get_post_... и ничего не получается. Одиночные значения выводит нормально, а массивы не хочет. Может подскажите как решить проблему с выводом на сайт значений из массива? Потому что это сериализованный массив. Используйте функцию maybe_unserialize(). Link to post Share on other sites
emagstyle 0 Posted July 16, 2015 Report Share Posted July 16, 2015 Потому что это сериализованный массив. Используйте функцию maybe_unserialize(). Про функцию get_post_meta прочитал, что "если в данных содержится сериализованный массив (serialize), то он автоматом будет обработан функцией unserialize(), т.е. чтобы получить сериализованные данные их не нужно отдельно обрабатывать функцией unserialize()." Link to post Share on other sites
emagstyle 0 Posted July 17, 2015 Report Share Posted July 17, 2015 Потому что это сериализованный массив. Используйте функцию maybe_unserialize(). Members будь добр подскажи как решить проблему! Для одиночного значения я делаю так: <?php echo (get_post_meta($post->ID, "wpcf-home-age-debtor", true)); ?> , и все нормально. для массива (у меня только чекбоксы) попробовал так: <?p $home_types = (get_post_custom_values ( 'wpcf-home-type' ) ); foreach ( $home_types as $key => $value ){ $value = maybe_unserialize( $value ); echo $key . " => " . $value . "<br />"; } ?> ; выводит "0 => Array" . пробовал еще так: <?php $home_readiness = (get_post_meta ( $post->ID, 'wpcf-home-readiness', false )); { $value = maybe_unserialize( $value ); echo $home_readiness[0]; echo "<br />"; } ?> Выводит "Array". Подскажи ка вывести именно значение (текст), используя maybe_unserialize(), чтобы вывести текст, который забит в админке? Link to post Share on other sites
VIP campusboy 912 Posted July 17, 2015 VIP Report Share Posted July 17, 2015 Он выводит Array, потому что, соотвественно, в переменной находится массив. Пропишите так: print_r ($var); и увидите, что находится внутри переменной. Естественно, $var - это пример названия переменной. А чтобы вывести инфу, запустите цикл, к примеру, с помощью foreach. Link to post Share on other sites
emagstyle 0 Posted July 19, 2015 Report Share Posted July 19, 2015 Он выводит Array, потому что, соотвественно, в переменной находится массив. Пропишите так: print_r ($var); и увидите, что находится внутри переменной. Естественно, $var - это пример названия переменной. А чтобы вывести инфу, запустите цикл, к примеру, с помощью foreach. выводится следующее Array ( [wpcf-fields-checkboxes-option-3fb7583d1954c005dd886d4706541dca-1] => Array ( [0] => Квартира ) ) получается с ключом [0] имеется только одно значение (у меня одно значение и выбрано в адмике для этой записи). Пробовал вывести так echo $var[0] выводит пустую строку. Link to post Share on other sites
VIP campusboy 912 Posted July 19, 2015 VIP Report Share Posted July 19, 2015 выводится следующее Array ( [wpcf-fields-checkboxes-option-3fb7583d1954c005dd886d4706541dca-1] => Array ( [0] => Квартира ) ) получается с ключом [0] имеется только одно значение (у меня одно значение и выбрано в адмике для этой записи). Пробовал вывести так echo $var[0] выводит пустую строку. Правильно, потому что ячейки такой нет, а вот $var[wpcf-fields-checkboxes-option-3fb7583d1954c005dd886d4706541dca-1][0] = "Квартира" - такая есть. Если судить по сериализованным данным, то у вас в одном месте хранятся как строки, так и массивы. То есть в первом массиве могут хранится строки + ещё вложенные массивы. Значит, одним foreach не обойтись. Запускаете 1 foreach и начинаете проверять, если строка - выводить на экран, если массив - запускать ещё один foreach и затем выводить на экран. К сожалению, не получается пока воспроизвести у себя такие сериализованные данные у себя на тесте. Link to post Share on other sites
emagstyle 0 Posted July 19, 2015 Report Share Posted July 19, 2015 Правильно, потому что ячейки такой нет, а вот $var[wpcf-fields-checkboxes-option-3fb7583d1954c005dd886d4706541dca-1][0] = "Квартира" - такая есть. Получается для вывода карточки каждой услуги нужно будет прописывать свою эту ячейку? Код для вывода карточки услуги написан общий,один для всех, только подставляются для каждой свои значения. Как тогда автоматизировать вывод каждой карточки с помощью общего кода показа этих карточек? Link to post Share on other sites
emagstyle 0 Posted July 19, 2015 Report Share Posted July 19, 2015 Получается для вывода карточки каждой услуги нужно будет прописывать свою эту ячейку? Код для вывода карточки услуги написан общий,один для всех, только подставляются для каждой свои значения. Как тогда автоматизировать вывод каждой карточки с помощью общего кода показа этих карточек? как тогда сделать вывод только отмеченных а админке значений. Все их перечислять и если ячейка [0] отмечена, то значить покажется? Link to post Share on other sites
VIP campusboy 912 Posted July 19, 2015 VIP Report Share Posted July 19, 2015 как тогда сделать вывод только отмеченных а админке значений. Все их перечислять и если ячейка [0] отмечена, то значить покажется? Я выше отредактировал свой пост, дополнив, что нужно сделать. Я могу теоретически код накидать, потому что практически мне ещё с такими данными не приходилось работать. Link to post Share on other sites
emagstyle 0 Posted July 19, 2015 Report Share Posted July 19, 2015 как тогда сделать вывод только отмеченных а админке значений. Все их перечислять и если ячейка [0] отмечена, то значить покажется? Правильно, потому что ячейки такой нет, а вот $var[wpcf-fields-checkboxes-option-3fb7583d1954c005dd886d4706541dca-1][0] = "Квартира" - такая есть. Если судить по сериализованным данным, то у вас в одном месте хранятся как строки, так и массивы. То есть в первом массиве могут хранится строки + ещё вложенные массивы. Значит, одним foreach не обойтись. Запускаете 1 foreach и начинаете проверять, если строка - выводить на экран, если массив - запускать ещё один foreach и затем выводить на экран. К сожалению, не получается пока воспроизвести у себя такие сериализованные данные у себя на тесте. попробовал. Все выводит, плохо, что все эти ячейки надо прописывать. я думал можно просто указать , что должны показываться ячейки с ключом [0] и все. Link to post Share on other sites
emagstyle 0 Posted July 19, 2015 Report Share Posted July 19, 2015 с помощью 2-х циклов foreach пошло выводить без прописывания названия ячеек. Благодарю за подсказку! Link to post Share on other sites
VIP campusboy 912 Posted July 19, 2015 VIP Report Share Posted July 19, 2015 (edited) с помощью 2-х циклов foreach пошло выводить без прописывания названия ячеек. Благодарю за подсказку! Я просто не совсем понимал, что именно вы хотите. Как говорится, чужая душа - потёмки Ну вот я понял, как создать такое поле (тупил что-то вчера), перебор всех ячеек массив и вывод на экран у меня так вышел: <?php $vars = get_post_meta($post->ID, 'test_field', false); function ArrayToString ($my_array){ foreach ($my_array as $my_string){ if (!is_array($my_string)) echo $my_string.'<br>'; if (is_array($my_string)) ArrayToString ($my_string); } } ArrayToString ($vars); ?> И не важно, какая вложенность будет у массивов - выведет всю инфу из всех ячеек. Естественно, надо будет доработать под себя, чтобы получилось соответствующая html-разметка. Edited July 19, 2015 by campusboy Link to post Share on other sites
emagstyle 0 Posted July 19, 2015 Report Share Posted July 19, 2015 Я просто не совсем понимал, что именно вы хотите. Как говорится, чужая душа - потёмки Ну вот я понял, как создать такое поле (тупил что-то вчера), перебор всех ячеек массив и вывод на экран у меня так вышел: <?php $vars = get_post_meta($post->ID, 'test_field', false); function ArrayToString ($my_array){ foreach ($my_array as $my_string){ if (!is_array($my_string)) echo $my_string.'<br>'; if (is_array($my_string)) ArrayToString ($my_string); } } ArrayToString ($vars); ?> И не важно, какая вложенность будет у массивов - выведет всю инфу из всех ячеек. Естественно, надо будет доработать под себя, чтобы получилось соответствующая html-разметка. я прописал так <?php $home_types = (get_post_custom_values ( 'wpcf-home-type', $ID )); if ( $home_types ) { foreach ( $home_types as $key => $value ) $val = maybe_unserialize ( $value );{ foreach ( $val as $key => $value ) echo ( $value[0] ); } echo "<br />"; } ?> только показываются значения в строку, не перекидывается последующее значение на новую строку, может не там ставлю <br >? Link to post Share on other sites
VIP campusboy 912 Posted July 19, 2015 VIP Report Share Posted July 19, 2015 я прописал так <?php $home_types = (get_post_custom_values ( 'wpcf-home-type', $ID )); if ( $home_types ) { foreach ( $home_types as $key => $value ) $val = maybe_unserialize ( $value );{ foreach ( $val as $key => $value ) echo ( $value[0] ); } echo "<br />"; } ?> только показываются значения в строку, не перекидывается последующее значение на новую строку, может не там ставлю <br >? Если Вы точно знаете, что произвольное поле хранит два массива, то такой код правильный, он даже предпочтительнее, так как оформить вывод проще в плане оформления. Последнее echo сотрите, оно относится к первому foreach, который ничего не выводит на экран. А первый напишите так: echo $value[0].'<br>'; Странно, конечно, Ваш код выглядит Но работает - и хорошо. Link to post Share on other sites
emagstyle 0 Posted July 19, 2015 Report Share Posted July 19, 2015 Если Вы точно знаете, что произвольное поле хранит два массива, то такой код правильный, он даже предпочтительнее, так как оформить вывод проще в плане оформления. Последнее echo сотрите, оно относится к первому foreach, который ничего не выводит на экран. А первый напишите так: echo $value[0].'<br>'; Странно, конечно, Ваш код выглядит Но работает - и хорошо. вы правы, теперь происходит перенос строки. Еще раз благодарю. Я знаю какие ячейки у меня содержат два массива там его сейчас и прописал, на остальных просто использую get_post_meta. Link to post Share on other sites
trumi 2 Posted January 3, 2019 Report Share Posted January 3, 2019 Подскажите есть два доп поля, выводится через плагин Advanced Custom Fields <div class="download"><a href="<?php the_field('downlink'); ?>" target="_blank">Скачать</a></div> <div class="rt"><a href="<?php the_field('demolink'); ?>" target="_blank">Скачать</a></div></div> Подскажите как сделать что-бы они показывали только, если они заполонены? Link to post Share on other sites
Модератор files 2838 Posted January 3, 2019 Модератор Report Share Posted January 3, 2019 12 минуты назад, trumi сказал: Подскажите есть два доп поля, выводится через плагин Advanced Custom Fields <div class="download"><a href="<?php the_field('downlink'); ?>" target="_blank">Скачать</a></div> <div class="rt"><a href="<?php the_field('demolink'); ?>" target="_blank">Скачать</a></div></div> Подскажите как сделать что-бы они показывали только, если они заполонены? Не уверен, но попробуйте: <?php if (the_field('downlink')) {?> <div class="download"><a href="<?php the_field('downlink'); ?>" target="_blank">Скачать</a></div> <?php } ?> <?php if (the_field('demolink')) {?> <div class="rt"><a href="<?php the_field('demolink'); ?>" target="_blank">Скачать</a></div></div> <?php } ?> Link to post Share on other sites
trumi 2 Posted January 3, 2019 Report Share Posted January 3, 2019 2 часа назад, files сказал: Не уверен, но попробуйте: <?php if (the_field('downlink')) {?> <div class="download"><a href="<?php the_field('downlink'); ?>" target="_blank">Скачать</a></div> <?php } ?> <?php if (the_field('demolink')) {?> <div class="rt"><a href="<?php the_field('demolink'); ?>" target="_blank">Скачать</a></div></div> <?php } ?> Работает. Спасибо! Link to post Share on other sites
Recommended Posts
Please sign in to comment
You will be able to leave a comment after signing in
Sign In Now