Домой Wp-Recall WP-Recall: Пишем свое дополнение и кастомизация Кастомизация галереи формы публикации
12ответ(ов) в теме
Kerncraft1
не в сети 2 года
На сайте с 18.07.2014
Участник
Тем 30
Сообщения 157
1
16:13
Версия WP-Recall: 16.5.0

Доброго дня. Хочу немного доработать способ вывода галереи, которая формируется в форме публикации. От сюда появились некоторые вопросы.

1. /wp-content/plugins/wp-recall/add-on/publicpost/shortcodes.php - приходиться вносить изменения в данный файл. Как обезопасить его при обновлении?

2. Как в ручном режиме указать место вывода галереи?

3. Можно-ли исключить из галереи "избранное изображение" (миниатюру поста)?

0
Андрей CS
не в сети 1 час
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16928
2
16:22

1. Никак. Изменения надо вносить за пределами плагина, для этого есть множество способов - использование хуков, фильтров и переназначение функций, в том числе, шорткодов.
2. Отключаете заданный плагином вывод, задаете свой.
3. Можно, если проверить каждое изображение на предмет принадлежности к миниатюре поста, ИД миниатюры храниться в произвольном поле _thumbnail_id

1
Kerncraft1
не в сети 2 года
На сайте с 18.07.2014
Участник
Тем 30
Сообщения 157
3
16:30

Люди! Помогите пожалуйста. Как в ручном режиме вывести галерею в нужном месте - разобрался.

Осталось понять как можно задать способ вывода галереи, который указан в /wp-content/plugins/wp-recall/add-on/publicpost/shortcodes.php (при этом не меняя файл). С переопределением шорткода у меня вышло фиаско.

И также не для моего ума - как исключить из галереи "избранное изображение" (миниатюру поста).

Готов оплатить работу, но на опубликованное задание никто не обращает внимания 😕

P.S. хочу полностью перенести функционал добавления записей на WP-Recall и только галерея не дает этого сделать(

0
Вова (Otshelnik-Fm)
не в сети 3 дня
На сайте с 27.01.2013
Участник
Тем 43
Сообщения 18654
4
16:40

если:

Kerncraft1 сказал(а)
Как в ручном режиме вывести галерею в нужном месте - разобрался.

То вот это не понятно:

Kerncraft1 сказал(а)
как можно задать способ вывода галереи, который указан в /wp-content/plugins/wp-recall/add-on/publicpost/shortcodes.php (при этом не меняя файл)

что за "способ вывода"?

0
Kerncraft1
не в сети 2 года
На сайте с 18.07.2014
Участник
Тем 30
Сообщения 157
5
16:43

Та часть в файле /wp-content/plugins/wp-recall/add-on/publicpost/shortcodes.php, в которой формируется html (теги div, ul и тд). Я бы хотел внести свои изменения. Собственно, если я их вношу в этот файл, то все получается как я хотел. Но этот способ не подходит из-за потери внесенных правок при обновлении.

0
Андрей CS
не в сети 1 час
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16928
6
17:07

для переопределения шорткода используйте функции remove_shortcode() и add_shortcode(), т.е. вы сначала отменяете действующий шорткод, а затем регистрируете его заново на стороне своего кода.

1
Kerncraft1
не в сети 2 года
На сайте с 18.07.2014
Участник
Тем 30
Сообщения 157
7
17:21

// Удаление шорткода галереи RCL
remove_shortcode('gallery-rcl','rcl_shortcode_gallery');

// Добавление нового шорткода галереи RCL
add_shortcode('gallery-rcl','rcl_shortcode_gallery');
function rcl_shortcode_gallery($atts, $content = null){
    global $post;

    rcl_bxslider_scripts();

    extract(shortcode_atts(array(
            'post_id' => false
    ),
    $atts));

    $post_id = $post->ID;

    $args = array(
        'post_parent' => $post_id,
        'post_type'   => 'attachment',
        'numberposts' => -1,
        'post_status' => 'any',
        'post_mime_type'=> 'image'
    );
    
    $childrens = get_children($args);

    if( $childrens ){
        $gallery = '';
        foreach((array) $childrens as $children ){
                $large = wp_get_attachment_image_src( $children->ID, 'large' );
                $gallery .= '';
                $thumbs[] = $large[0];
        }
        $gallery .= ''
                . '';

        if(count($thumbs)>1){
                $gallery .= '<div class="video-gallery"><div class="head-video-gallery">Скриншоты модификации</div><div class="images-gallery">';
                        foreach($thumbs as $k=>$src ){
                                $gallery .= '<div class="item-gallery"><a rel="lightbox" data-slide-index="'.$k.'" href="'.$src.'"><img src="'.$src.'" /></a></div>';
                        }
                $gallery .= '</div></div>';
        }
    }

    return $gallery;
}

Если вставляю только remove_shortcode('gallery-rcl','rcl_shortcode_gallery');, то шорткод перестает работать (в записе [gallery-rcl post_id="2999"]).

Но когда добавляю код ниже add_shortcode('gallery-rcl','rcl_shortcode_gallery'); и дальше, то получаю ошибку: "Fatal error: Cannot redeclare rcl_shortcode_gallery() (previously declared in /var/www/kerncraft1/data/www/test2.admin31-center.ru/wp-content/plugins/wp-recall/add-on/publicpost/shortcodes.php:10) in /var/www/kerncraft1/data/www/test2.admin31-center.ru/wp-content/themes/jannah-child/functions.php on line 147"

0
Kerncraft1
не в сети 2 года
На сайте с 18.07.2014
Участник
Тем 30
Сообщения 157
8
17:36

Так. С этой бедой тоже разобрался! Спасибо Андрей. К новому шорткоду добавил обновленную функцию - rcl_shortcode_gallery_1.

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

0
Андрей CS
не в сети 1 час
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16928
9
19:00

для этого вам надо дополнить код шорткода получением ИД миниатюры текущего поста, если миниатюра вообще имеется:

$thumbnail_id = 0;
if(has_post_thumbnail($post_id)){
    $thumbnail_id = get_post_thumbnail_id($post_id);
}

а при переборе дочерних изображений делать проверку на соответствие ИД изображения ИД миниатюры если миниатюра была найдена и пропускать ее:
if($thumbnail_id && $thumbnail_id == $children->ID) continue;

Весь код вашей функции будет примерно такой (работоспособность не проверял):
function rcl_shortcode_gallery($atts, $content = null){
    global $post;

    rcl_bxslider_scripts();

    extract(shortcode_atts(array(
            'post_id' => false
    ),
    $atts));

    $post_id = $post->ID;

    $args = array(
        'post_parent' => $post_id,
        'post_type'   => 'attachment',
        'numberposts' => -1,
        'post_status' => 'any',
        'post_mime_type'=> 'image'
    );
    
    $childrens = get_children($args);

    if( $childrens ){
		//тут получаем ИД миниатюры
        $thumbnail_id = 0;
		if(has_post_thumbnail($post_id)){
		    $thumbnail_id = get_post_thumbnail_id($post_id);
		}

        $gallery = '';
        foreach((array) $childrens as $children ){
		//тут пропускаем миниатюру из вывода
		if($thumbnail_id && $thumbnail_id == $children->ID) continue;
			
		$large = wp_get_attachment_image_src( $children->ID, 'large' );
		$gallery .= '';
		$thumbs[] = $large[0];
        }
        $gallery .= ''
                . '';

        if(count($thumbs)>1){
		$gallery .= '<div class="video-gallery"><div class="head-video-gallery">Скриншоты модификации</div><div class="images-gallery">';
		foreach($thumbs as $k=>$src ){
		    $gallery .= '<div class="item-gallery"><a rel="lightbox" data-slide-index="'.$k.'" href="'.$src.'"><img src="'.$src.'" /></a></div>';
		}
		    $gallery .= '</div></div>';
        }
    }

    return $gallery;
}

1
Kerncraft1
не в сети 2 года
На сайте с 18.07.2014
Участник
Тем 30
Сообщения 157
10
19:09

Ура! Андрей, спасибо огромное! Теперь все работает как мне и хотелось.

0
Андрей CS
не в сети 1 час
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16928
11
19:12

Человек захотел разобраться и разобрался. Респект.

1
Kerncraft1
не в сети 2 года
На сайте с 18.07.2014
Участник
Тем 30
Сообщения 157
12
19:19

Это Вам огромный респект. У меня с программированием пока ОЧЕНЬ туго. Все сделано по вашим четким указаниям.

0
Тема закрыта. Публикация новых сообщений запрещена.