Доброго дня. Хочу немного доработать способ вывода галереи, которая формируется в форме публикации. От сюда появились некоторые вопросы.
1. /wp-content/plugins/wp-recall/add-on/publicpost/shortcodes.php - приходиться вносить изменения в данный файл. Как обезопасить его при обновлении?
2. Как в ручном режиме указать место вывода галереи?
3. Можно-ли исключить из галереи "избранное изображение" (миниатюру поста)?
1. Никак. Изменения надо вносить за пределами плагина, для этого есть множество способов - использование хуков, фильтров и переназначение функций, в том числе, шорткодов.
2. Отключаете заданный плагином вывод, задаете свой.
3. Можно, если проверить каждое изображение на предмет принадлежности к миниатюре поста, ИД миниатюры храниться в произвольном поле _thumbnail_id
Люди! Помогите пожалуйста. Как в ручном режиме вывести галерею в нужном месте - разобрался.
Осталось понять как можно задать способ вывода галереи, который указан в /wp-content/plugins/wp-recall/add-on/publicpost/shortcodes.php (при этом не меняя файл). С переопределением шорткода у меня вышло фиаско.
И также не для моего ума - как исключить из галереи "избранное изображение" (миниатюру поста).
Готов оплатить работу, но на опубликованное задание никто не обращает внимания
P.S. хочу полностью перенести функционал добавления записей на WP-Recall и только галерея не дает этого сделать(
если:
Kerncraft1 сказал(а)
Как в ручном режиме вывести галерею в нужном месте - разобрался.
То вот это не понятно:
Kerncraft1 сказал(а)
как можно задать способ вывода галереи, который указан в /wp-content/plugins/wp-recall/add-on/publicpost/shortcodes.php (при этом не меняя файл)
что за "способ вывода"?
Та часть в файле /wp-content/plugins/wp-recall/add-on/publicpost/shortcodes.php, в которой формируется html (теги div, ul и тд). Я бы хотел внести свои изменения. Собственно, если я их вношу в этот файл, то все получается как я хотел. Но этот способ не подходит из-за потери внесенных правок при обновлении.
// Удаление шорткода галереи 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"
для этого вам надо дополнить код шорткода получением ИД миниатюры текущего поста, если миниатюра вообще имеется:
$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;
}