проверка на существование custom fields + php

Проблема вот в чем:
хочу в sidebar.php при просмотре поста/страницы выводить галерею nextgen Gallery (т.е. ВНЕ лупа) так:
<?php echo nggShowGallery(‘1’); ?>
где соответственно 1 — id галереи

Если вставлять <?php echo nggShowGallery(‘1’); ?> в поле custom fields, то php «не работает», на страницу ничего не выводится 🙁

Тогда можно в custom field (key=gallery) вставлять только id галереи, логично?
Но тут тоже скорее всего засада: если ключ gallery не существует для конкр. поста/страницы, то плагин nextgen Gallery я думаю сильно озадачится по поводу отсутствия id галереи в <?php echo nggShowGallery(‘id’); ?> или нет?

Т.е. надо бы сначала проверить на существование произв. поля gallery для данного поста, а потом галерею выводить.
Вот с составлением этого условия у меня проблемы 🙁

не могу правильно скрестить

<?php echo nggShowGallery('gallery'); ?>

и

<?php if (is_single() || is_page() ) { 
$key="gallery"; 
echo get_post_meta($post->ID, $key, true); 
 } ?>

Помогите составить такое условие:
имеем: custom field = gallery

если ключ gallery в посте/странице заполнено,
то <?php echo nggShowGallery(‘сюда выводим ключ gallery’); ?>
если ключа gallery нет
то ничего не выводим

А может чего попроще можно придумать?

Если ты делаешь вне цикла, то $post может быть не определена. Поэтому нужно использовать немного другой код.

Получаем номер записи, если это is_single или is_page

$myid = $wp_query->post->ID

Получаем массив всех мета указанной записи:

$my_meta = get_post_custom_values( $meta_key, $myid );

– где $meta_key – нужное поле.

Дальше смотрим значение поля как массив и делаем с ним что нужно. 🙂

Дальше смотрим значение поля как массив и делаем с ним что нужно. :)

*голосом Петьки* «А я даже представить не могу, как он выглядит, этот квадратный трехчлен!»

Товарищи, ну помогите с условием?

Если вне цикла, но в single или page, будет работать такой код:

<?php
    $myid = $wp_query->post->ID;


    # вывод определенного поля - с ключом gallery
    $my_meta = get_post_custom_values( 'gallery', $myid );
    if ( $my_meta) { // есть для этой записи такая мета
        // выводим
        echo '<strong>Галлерея</strong>: '; // заголовок
        foreach ( $my_meta as $val_key => $val_val ) echo $val_val; // вывод всех значений этой мета
    }
?>

Если у тебя используется просто ключ gallery – где указывается номер, то цикл foreach вернет единственную переменную $val_val, котрая будет содержать номер нужной галереи.

То есть после цикла нужно просто дописать

   ...
    $val_val = (int) trim( $val_val );

Просто если этого не делать, то можно обзывать галереи не по номеру, а как-то произвольно. (Просто я не знаю, допускает ли это плагин.)

ААА! Спасибо! Работает! 😀

Что получилось:

 <?php
    $myid = $wp_query->post->ID;
    $my_meta = get_post_custom_values( 'gallery', $myid );
    if ( $my_meta) { 
        echo '<strong>Галерея</strong>: '; 
        foreach ( $my_meta as $val_key => $val_val )
        $val_val = (int) trim( $val_val ); 
        echo nggShowGallery($val_val);
    }
?>

Плагин next gallery допускает только указание id галереи, так что проверка кстати!

Подскажите, пожалуйста, как подобным образом вывести singlepic? В custom field можно указывать только id. ООчень надеюсь на вашу помощь)))

Ой, рано спросила, разобралась)))) Спасибо)))
<?php
$myid = $wp_query->post->ID;
$my_meta = get_post_custom_values( ‘image-id’, $myid );
if ( $my_meta) {
foreach ( $my_meta as $val_key => $val_val )
$val_val = (int) trim( $val_val );
echo nggSinglePicture($val_val, 250, 250, $mode="",$float="");
}
?>
Правильно?

Не совсем. Конструкция $mode="" в декларации функции означает, что 3-й параметр будет присвоен внутренней переменной $mode, а если он не будет указан, то будет присвоено значение "пустая строка" (т.н. дефолтное значение). То же относится и к $float. Если дефолтные значения устаривают, то их можно просто пропустить. Итого должно сработать echo nggSinglePicture($val_val, 250, 250); Хотя ХЗ что она там возвращает, смотреть надо 🙂

Одинаково работает и так: echo nggSinglePicture($val_val, 250, 250, $mode="",$float=""); и так: echo nggSinglePicture($val_val, 250, 250); 🙂 оставлю ваш вариант))) Спасибо!

Конечно, одинаково. Только $mode="" и $float="" порождают две (если не четыре) строковых переменных, которые мало того, что жрут память (не много, но все-таки), так еще и теоретически могут перебить значение нужной переменной. Так что это больше вопрос принципа чем работоспособности.

Я использую следующий код:

                                <?php if ($buffer=get_post_meta($post->ID,'project-showphoto-nggallery',true)) : ?>
                                    <STRONG class="title">Фотоотчет</STRONG>                                            
                                    <?php nggShowGallery($buffer); ?>                                    
                                <?php endif; ?>

Все это внутри основного цикла. Но…. ничего не работает.
Вы везде рассматриваете доступность переменной $post, а у меня вот проблема с nggShowGallery: 🙁

Сорри. Не заметил что функция ничего не выводит, а возвращает. И, естесстно, не вписал перед ней "echo ".

Ой, рано спросила, разобралась)))) Спасибо)))
<?php
$myid = $wp_query->post->ID;
$my_meta = get_post_custom_values( 'image-id', $myid );
if ( $my_meta) {
foreach ( $my_meta as $val_key => $val_val )
$val_val = (int) trim( $val_val );
echo nggSinglePicture($val_val, 250, 250, $mode="",$float="");
}
?>
Правильно?

в последней версии nextgen-gallery-133, этот код не работает. Синглпик теперь выводиться так [singlepic id=x w=width h=height].
но так:

echo nggSinglePicture($val_val, $width = 40, $height = 40);

не выводиться ничего. что делать? как?

Anonymous
Отправить
Ответ на: