Jump to content

Вывод доп. поля только если оно заполнено


Recommended Posts

Приветствую всех.

 

На сайте организован вывод иконок через доп. поля таким кодом 

<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

зачем так сложно, еще и с плагином?

вставляете код там где нужно выводить доп поле

<?php
$my_meta = get_post_custom_values( 'pole', $ID );
if ( $my_meta) {
echo 'Источник: ';
foreach ( $my_meta as $val_key => $val_val ) echo $val_val;
}
?>

и никаких заморочек )

Link to post
Share on other sites

зачем так сложно, еще и с плагином?

вставляете код там где нужно выводить доп поле

<?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

На сколько я понимаю, если поле 'pole' заполнено, то должна выводиться надпись "Источник:", верно?

да, и содержимое доп поля 'pole', которое вы заполняете при публикации записи

 

тьфу, чето я на аброкадабил )) ну вы поняли, код работает отлично, вставляю с его помощью рекламные заметки ниже основного контента.

Link to post
Share on other sites
  • 2 months later...

Приветствую!

Я также пользуюсь 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

Приветствую!

Я также пользуюсь 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

Потому что это сериализованный массив. Используйте функцию maybe_unserialize().

 Про функцию get_post_meta прочитал, что

"если в данных содержится сериализованный массив (serialize), то он автоматом будет обработан функцией unserialize(), т.е. чтобы получить сериализованные данные их не нужно отдельно обрабатывать функцией unserialize()."

Link to post
Share on other sites

Потому что это сериализованный массив. Используйте функцию 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

Он выводит Array, потому что, соотвественно, в переменной находится массив. Пропишите так:

print_r ($var);

и увидите, что находится внутри переменной. Естественно, $var - это пример названия переменной. А чтобы вывести инфу, запустите цикл, к примеру, с помощью foreach.

Link to post
Share on other sites

Он выводит 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

выводится следующее

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

Правильно, потому что ячейки такой нет, а вот $var[wpcf-fields-checkboxes-option-3fb7583d1954c005dd886d4706541dca-1][0] = "Квартира" - такая есть.

 Получается для вывода карточки каждой услуги нужно будет прописывать свою эту ячейку? Код для вывода карточки услуги написан общий,один для всех, только подставляются для каждой свои значения. Как тогда автоматизировать вывод каждой карточки с помощью общего кода показа этих карточек?

Link to post
Share on other sites

 Получается для вывода карточки каждой услуги нужно будет прописывать свою эту ячейку? Код для вывода карточки услуги написан общий,один для всех, только подставляются для каждой свои значения. Как тогда автоматизировать вывод каждой карточки с помощью общего кода показа этих карточек?

как тогда сделать вывод только отмеченных а админке значений. Все их перечислять и если ячейка [0] отмечена, то значить покажется?

Link to post
Share on other sites
  • VIP

как тогда сделать вывод только отмеченных а админке значений. Все их перечислять и если ячейка [0] отмечена, то значить покажется?

Я выше отредактировал свой пост, дополнив, что нужно сделать. Я могу теоретически код накидать, потому что практически мне ещё с такими данными не приходилось работать.

Link to post
Share on other sites

как тогда сделать вывод только отмеченных а админке значений. Все их перечислять и если ячейка [0] отмечена, то значить покажется?

 

Правильно, потому что ячейки такой нет, а вот $var[wpcf-fields-checkboxes-option-3fb7583d1954c005dd886d4706541dca-1][0] = "Квартира" - такая есть.

Если судить по сериализованным данным, то у вас в одном месте хранятся как строки, так и массивы. То есть в первом массиве могут хранится строки + ещё вложенные массивы. Значит, одним foreach не обойтись. Запускаете 1 foreach и начинаете проверять, если строка - выводить на экран, если массив - запускать ещё один foreach и затем выводить на экран. К сожалению, не получается пока воспроизвести у себя такие сериализованные данные у себя на тесте.

попробовал. Все выводит, плохо, что все эти ячейки надо прописывать. я думал можно просто указать , что должны показываться ячейки с ключом [0] и все.

Link to post
Share on other sites
  • VIP

с помощью 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 by campusboy
Link to post
Share on other sites

Я просто не совсем понимал, что именно вы хотите. Как говорится, чужая душа - потёмки  :)

Ну вот я понял, как создать такое поле (тупил что-то вчера), перебор всех ячеек массив и вывод на экран у меня так вышел:

<?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

я прописал так 

<?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

 

Если Вы точно знаете, что произвольное поле хранит два массива, то такой код правильный, он даже предпочтительнее, так как оформить вывод проще в плане оформления. Последнее echo сотрите, оно относится к первому foreach, который ничего не выводит на экран. А первый напишите так:

echo $value[0].'<br>';

Странно, конечно, Ваш код выглядит  :) Но работает - и хорошо.

 

вы правы, теперь происходит перенос строки. Еще раз благодарю.

Я знаю какие ячейки у меня содержат два массива там его сейчас и прописал, на остальных просто использую get_post_meta. 

Link to post
Share on other sites
  • 3 years later...

      Подскажите есть два доп поля, выводится через плагин 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
  • Модератор
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
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

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...