Доброго дня. Хочу немного доработать способ вывода галереи, которая формируется в форме публикации. От сюда появились некоторые вопросы.
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; }