Intereting Posts
Пытаясь использовать WP_Query для отображения пользовательского типа сообщения Страница Admin Blank с рабочим фронтом после обновления до WordPress 4.6 wp_hash_password неожиданное поведение Галерея WordPress с ярлыком ID не работает 404, когда enqueue_script с помощью plugin_url Профиль / benchmark wordpress на apache? WP_Query orderby не работает с пользовательским post_type Создание настраиваемого типа сообщений с параметрами Добавить дату до названия записи в двадцать двенадцать Создать пользовательскую конечную точку API доступа, которая переносит существующую конечную точку? автоматически сохранять название персонализированного типа в качестве категории После того, как вы закроете кнопку браузера в двадцати шестнадцати профиль темы Как заменить заголовок 20-го изображения моим флеш-баннером? Добавление статистики пользовательских сообщений в пользовательский вид панели управления save_post action hook для комментариев

Как вручную исправить код галереи WordPress с помощью PHP в functions.php?

Много раз говорили, что WordPress выводит очень плохой код для встроенной функции галереи.

Это основной код, отвечающий за вывод галереи (в /wp-includes/media.php):

function gallery_shortcode($attr) { global $post; static $instance = 0; $instance++; // Allow plugins/themes to override the default gallery template. $output = apply_filters('post_gallery', '', $attr); if ( $output != '' ) return $output; // We're trusting author input, so let's at least make sure it looks like a valid orderby statement if ( isset( $attr['orderby'] ) ) { $attr['orderby'] = sanitize_sql_orderby( $attr['orderby'] ); if ( !$attr['orderby'] ) unset( $attr['orderby'] ); } extract(shortcode_atts(array( 'order' => 'ASC', 'orderby' => 'menu_order ID', 'id' => $post->ID, 'itemtag' => 'dl', 'icontag' => 'dt', 'captiontag' => 'dd', 'columns' => 3, 'size' => 'thumbnail', 'include' => '', 'exclude' => '' ), $attr)); $id = intval($id); if ( 'RAND' == $order ) $orderby = 'none'; if ( !empty($include) ) { $include = preg_replace( '/[^0-9,]+/', '', $include ); $_attachments = get_posts( array('include' => $include, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby) ); $attachments = array(); foreach ( $_attachments as $key => $val ) { $attachments[$val->ID] = $_attachments[$key]; } } elseif ( !empty($exclude) ) { $exclude = preg_replace( '/[^0-9,]+/', '', $exclude ); $attachments = get_children( array('post_parent' => $id, 'exclude' => $exclude, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby) ); } else { $attachments = get_children( array('post_parent' => $id, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby) ); } if ( empty($attachments) ) return ''; if ( is_feed() ) { $output = "\n"; foreach ( $attachments as $att_id => $attachment ) $output .= wp_get_attachment_link($att_id, $size, true) . "\n"; return $output; } $itemtag = tag_escape($itemtag); $captiontag = tag_escape($captiontag); $columns = intval($columns); $itemwidth = $columns > 0 ? floor(100/$columns) : 100; $float = is_rtl() ? 'right' : 'left'; $selector = "gallery-{$instance}"; $gallery_style = $gallery_div = ''; if ( apply_filters( 'use_default_gallery_style', true ) ) $gallery_style = " <style type='text/css'> #{$selector} { margin: auto; } #{$selector} .gallery-item { float: {$float}; margin-top: 10px; text-align: center; width: {$itemwidth}%; } #{$selector} img { border: 2px solid #cfcfcf; } #{$selector} .gallery-caption { margin-left: 0; } </style> <!-- see gallery_shortcode() in wp-includes/media.php -->"; $size_class = sanitize_html_class( $size ); $gallery_div = "<div id='$selector' class='gallery galleryid-{$id} gallery-columns-{$columns} gallery-size-{$size_class}'>"; $output = apply_filters( 'gallery_style', $gallery_style . "\n\t\t" . $gallery_div ); $i = 0; foreach ( $attachments as $id => $attachment ) { $link = isset($attr['link']) && 'file' == $attr['link'] ? wp_get_attachment_link($id, $size, false, false) : wp_get_attachment_link($id, $size, true, false); $output .= "<{$itemtag} class='gallery-item'>"; $output .= " <{$icontag} class='gallery-icon'> $link </{$icontag}>"; if ( $captiontag && trim($attachment->post_excerpt) ) { $output .= " <{$captiontag} class='wp-caption-text gallery-caption'> " . wptexturize($attachment->post_excerpt) . " </{$captiontag}>"; } $output .= "</{$itemtag}>"; if ( $columns > 0 && ++$i % $columns == 0 ) $output .= '<br style="clear: both" />'; } $output .= " <br style='clear: both;' /> </div>\n"; return $output; } 

Что я хотел бы исправить?

[1] Вышеприведенный код выводит css-стиль непосредственно в сообщение. Я хочу остановить это, так как я могу легко добавить тот же код css в мою таблицу стилей style.css.

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

[3] Вышеупомянутый код добавляет два элемента <br style="clear: both;"> после кода галереи. Я также хотел бы отключить это, так как я могу использовать «margin» в коде css для этого.

Я хотел бы выполнить вышеупомянутые «ТРИ» вещи, используя некоторый PHP-код в файле functions.php , так как редактирование основных файлов не рекомендуется.

Надеюсь, кто-то может помочь. (Я не знаю, как закодировать, так что, пожалуйста, будьте как можно яснее.) Спасибо!

СООТВЕТСТВУЮЩИЙ: Исходный файл для просмотра – /wp-includes/media.php (вот версия туловища – gallery_shortcode функцию gallery_shortcode ).

Solutions Collecting From Web of "Как вручную исправить код галереи WordPress с помощью PHP в functions.php?"

Как было упомянуто перед удалением короткого кода и повторным добавлением, он не совместим с другими плагинами, модифицирующими галереи, поэтому вместо этого вы используете post_gallery фильтр post_gallery и тот же код из функции gallery_shortcode но с вашей собственной модификацией, например, я прокомментировал вне частей, которые вы не хотите:

 function fix_my_gallery_wpse43558($output, $attr) { global $post; static $instance = 0; $instance++; /** * will remove this since we don't want an endless loop going on here */ // Allow plugins/themes to override the default gallery template. //$output = apply_filters('post_gallery', '', $attr); // We're trusting author input, so let's at least make sure it looks like a valid orderby statement if ( isset( $attr['orderby'] ) ) { $attr['orderby'] = sanitize_sql_orderby( $attr['orderby'] ); if ( !$attr['orderby'] ) unset( $attr['orderby'] ); } extract(shortcode_atts(array( 'order' => 'ASC', 'orderby' => 'menu_order ID', 'id' => $post->ID, 'itemtag' => 'dl', 'icontag' => 'dt', 'captiontag' => 'dd', 'columns' => 3, 'size' => 'thumbnail', 'include' => '', 'exclude' => '' ), $attr)); $id = intval($id); if ( 'RAND' == $order ) $orderby = 'none'; if ( !empty($include) ) { $include = preg_replace( '/[^0-9,]+/', '', $include ); $_attachments = get_posts( array('include' => $include, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby) ); $attachments = array(); foreach ( $_attachments as $key => $val ) { $attachments[$val->ID] = $_attachments[$key]; } } elseif ( !empty($exclude) ) { $exclude = preg_replace( '/[^0-9,]+/', '', $exclude ); $attachments = get_children( array('post_parent' => $id, 'exclude' => $exclude, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby) ); } else { $attachments = get_children( array('post_parent' => $id, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby) ); } if ( empty($attachments) ) return ''; if ( is_feed() ) { $output = "\n"; foreach ( $attachments as $att_id => $attachment ) $output .= wp_get_attachment_link($att_id, $size, true) . "\n"; return $output; } $itemtag = tag_escape($itemtag); $captiontag = tag_escape($captiontag); $columns = intval($columns); $itemwidth = $columns > 0 ? floor(100/$columns) : 100; $float = is_rtl() ? 'right' : 'left'; $selector = "gallery-{$instance}"; $gallery_style = $gallery_div = ''; if ( apply_filters( 'use_default_gallery_style', true ) ) /** * this is the css you want to remove * #1 in question */ /* $gallery_style = " <style type='text/css'> #{$selector} { margin: auto; } #{$selector} .gallery-item { float: {$float}; margin-top: 10px; text-align: center; width: {$itemwidth}%; } #{$selector} img { border: 2px solid #cfcfcf; } #{$selector} .gallery-caption { margin-left: 0; } </style> <!-- see gallery_shortcode() in wp-includes/media.php -->"; */ $size_class = sanitize_html_class( $size ); $gallery_div = "<div id='$selector' class='gallery galleryid-{$id} gallery-columns-{$columns} gallery-size-{$size_class}'>"; $output = apply_filters( 'gallery_style', $gallery_style . "\n\t\t" . $gallery_div ); $i = 0; foreach ( $attachments as $id => $attachment ) { $link = isset($attr['link']) && 'file' == $attr['link'] ? wp_get_attachment_link($id, $size, false, false) : wp_get_attachment_link($id, $size, true, false); $output .= "<{$itemtag} class='gallery-item'>"; $output .= " <{$icontag} class='gallery-icon'> $link </{$icontag}>"; /* * This is the caption part so i'll comment that out * #2 in question */ /* if ( $captiontag && trim($attachment->post_excerpt) ) { $output .= " <{$captiontag} class='wp-caption-text gallery-caption'> " . wptexturize($attachment->post_excerpt) . " </{$captiontag}>"; }*/ $output .= "</{$itemtag}>"; if ( $columns > 0 && ++$i % $columns == 0 ) $output .= '<br style="clear: both" />'; } /** * this is the extra br you want to remove so we change it to jus closing div tag * #3 in question */ /*$output .= " <br style='clear: both;' /> </div>\n"; */ $output .= "</div>\n"; return $output; } add_filter("post_gallery", "fix_my_gallery_wpse43558",10,2); 

См. Ниже описание badlearner

Вы можете удалить короткий код по умолчанию и создать свой собственный. Так же (в ваших functions.php):

 remove_shortcode( 'gallery' ); function my_own_gallary() { // Gallery code } add_shortcode( 'gallery' , 'my_own_gallary' ); 

Самый простой способ изменить короткий код – скопировать его в свой файл functions.php и изменить функцию, чтобы назвать что-то вроде my_own_gallary и начать редактирование.


РЕДАКТИРОВАТЬ

Как отмечалось в комментариях к заметкам: есть фильтр для короткого кода галереи, поэтому не нужно сначала удалять короткий код.

пример, который вы можете использовать в своих функциях.php (вывод – это короткий код галереи по умолчанию, поэтому вы можете его изменить).

 function my_own_gallery($output, $attr) { global $post; static $instance = 0; $instance++; // We're trusting author input, so let's at least make sure it looks like a valid orderby statement if ( isset( $attr['orderby'] ) ) { $attr['orderby'] = sanitize_sql_orderby( $attr['orderby'] ); if ( !$attr['orderby'] ) unset( $attr['orderby'] ); } extract(shortcode_atts(array( 'order' => 'ASC', 'orderby' => 'menu_order ID', 'id' => $post->ID, 'itemtag' => 'dl', 'icontag' => 'dt', 'captiontag' => 'dd', 'columns' => 3, 'size' => 'thumbnail', 'include' => '', 'exclude' => '' ), $attr)); $id = intval($id); if ( 'RAND' == $order ) $orderby = 'none'; if ( !empty($include) ) { $include = preg_replace( '/[^0-9,]+/', '', $include ); $_attachments = get_posts( array('include' => $include, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby) ); $attachments = array(); foreach ( $_attachments as $key => $val ) { $attachments[$val->ID] = $_attachments[$key]; } } elseif ( !empty($exclude) ) { $exclude = preg_replace( '/[^0-9,]+/', '', $exclude ); $attachments = get_children( array('post_parent' => $id, 'exclude' => $exclude, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby) ); } else { $attachments = get_children( array('post_parent' => $id, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby) ); } if ( empty($attachments) ) return ''; if ( is_feed() ) { $output = "\n"; foreach ( $attachments as $att_id => $attachment ) $output .= wp_get_attachment_link($att_id, $size, true) . "\n"; return $output; } $itemtag = tag_escape($itemtag); $captiontag = tag_escape($captiontag); $columns = intval($columns); $itemwidth = $columns > 0 ? floor(100/$columns) : 100; $float = is_rtl() ? 'right' : 'left'; $selector = "gallery-{$instance}"; $gallery_style = $gallery_div = ''; if ( apply_filters( 'use_default_gallery_style', true ) ) $gallery_style = " <style type='text/css'> #{$selector} { margin: auto; } #{$selector} .gallery-item { float: {$float}; margin-top: 10px; text-align: center; width: {$itemwidth}%; } #{$selector} img { border: 2px solid #cfcfcf; } #{$selector} .gallery-caption { margin-left: 0; } </style> <!-- see gallery_shortcode() in wp-includes/media.php -->"; $size_class = sanitize_html_class( $size ); $gallery_div = "<div id='$selector' class='gallery galleryid-{$id} gallery-columns-{$columns} gallery-size-{$size_class}'>"; $output = apply_filters( 'gallery_style', $gallery_style . "\n\t\t" . $gallery_div ); $i = 0; foreach ( $attachments as $id => $attachment ) { $link = isset($attr['link']) && 'file' == $attr['link'] ? wp_get_attachment_link($id, $size, false, false) : wp_get_attachment_link($id, $size, true, false); $output .= "<{$itemtag} class='gallery-item'>"; $output .= " <{$icontag} class='gallery-icon'> $link </{$icontag}>"; if ( $captiontag && trim($attachment->post_excerpt) ) { $output .= " <{$captiontag} class='wp-caption-text gallery-caption'> " . wptexturize($attachment->post_excerpt) . " </{$captiontag}>"; } $output .= "</{$itemtag}>"; if ( $columns > 0 && ++$i % $columns == 0 ) $output .= '<br style="clear: both" />'; } $output .= " <br style='clear: both;' /> </div>\n"; return $output; } add_filter("post_gallery", "my_own_gallery",10,2); 

Объяснение: В коротком коде, определяемом WordPress, вы увидите:

 $output = apply_filters('post_gallery', '', $attr); if ( $output != '' ) return $output; 

Это означает, что если фильтр применяется и возвращает что-то, это будет использоваться (возвращено), в противном случае функция продолжит (по умолчанию короткий код).

Чтобы добавить фильтр, вы используете функцию add_filter . Первый аргумент – это тег фильтра (в данном случае «post_gallery»), второй – функция для добавления (функция, которая вернет ваш собственный выход в галерею).

Таким образом, это выдаст «тест» для короткого кода [gallery]:

 function my_own_gallery($output, $attr) { return 'test'; } add_filter("post_gallery", "my_own_gallery",10,2); 

В моем примере, приведенном ниже, вы увидите, что add_filter создает код по умолчанию с вашим собственным редактируемым кодом. Вы можете отредактировать это или начать с нуля, как вам будет угодно.


( EDIT by Otto: вышеизложенное было исправлено Отто. @RobVermeer не удалил первый параметр фильтра и не сделал add_filter правильно. Фильтр post_gallery – это правильный способ сделать это. Удаление короткого кода и повторного ввода добавление его (как проверено badlearner ниже) нецелесообразно, так как оно несовместимо с другими плагинами, модифицирующими галереи.)


Добавлено / Отредактировано badlearner :

Фильтрующий метод изменения кода галереи (в /wp-includes/media.php) с использованием функций.php, как это предусмотрено @RobVermeer, похоже, не работает должным образом (см. Комментарии этого ответа).

Но первый ответ RobVermeer (т. Е. Перед первым редактированием), который отменяет регистрацию короткого кода галереи и регистрирует новый короткий код галереи, работал. И вот код, и, пожалуйста, не стесняйтесь редактировать или добавлять ответ, если есть лучший способ .

Ниже приведен код, который необходимо добавить в файл functions.php вашей темы:

 <?php remove_shortcode( 'gallery' ); add_shortcode( 'gallery' , 'my_own_gallary' ); function my_own_gallary($attr) { global $post; static $instance = 0; $instance++; // Allow plugins/themes to override the default gallery template. $output = apply_filters('post_gallery', '', $attr); if ( $output != '' ) return $output; // We're trusting author input, so let's at least make sure it looks like a valid orderby statement if ( isset( $attr['orderby'] ) ) { $attr['orderby'] = sanitize_sql_orderby( $attr['orderby'] ); if ( !$attr['orderby'] ) unset( $attr['orderby'] ); } extract(shortcode_atts(array( 'order' => 'ASC', 'orderby' => 'menu_order ID', 'id' => $post->ID, 'itemtag' => 'dl', 'icontag' => 'dt', 'captiontag' => 'dd', 'columns' => 3, 'size' => 'thumbnail', 'include' => '', 'exclude' => '' ), $attr)); $id = intval($id); if ( 'RAND' == $order ) $orderby = 'none'; if ( !empty($include) ) { $include = preg_replace( '/[^0-9,]+/', '', $include ); $_attachments = get_posts( array('include' => $include, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby) ); $attachments = array(); foreach ( $_attachments as $key => $val ) { $attachments[$val->ID] = $_attachments[$key]; } } elseif ( !empty($exclude) ) { $exclude = preg_replace( '/[^0-9,]+/', '', $exclude ); $attachments = get_children( array('post_parent' => $id, 'exclude' => $exclude, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby) ); } else { $attachments = get_children( array('post_parent' => $id, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby) ); } if ( empty($attachments) ) return ''; if ( is_feed() ) { $output = "\n"; foreach ( $attachments as $att_id => $attachment ) $output .= wp_get_attachment_link($att_id, $size, true) . "\n"; return $output; } $itemtag = tag_escape($itemtag); $captiontag = tag_escape($captiontag); $columns = intval($columns); $itemwidth = $columns > 0 ? floor(100/$columns) : 100; $float = is_rtl() ? 'right' : 'left'; $selector = "gallery-{$instance}"; $gallery_style = $gallery_div = ''; if ( apply_filters( 'use_default_gallery_style', true ) ) $gallery_style = " <style type='text/css'> #{$selector} .gallery-item { width: {$itemwidth}%; } </style>"; $size_class = sanitize_html_class( $size ); $gallery_div = "<div id='$selector' class='gallery galleryid-{$id} gallery-columns-{$columns} gallery-size-{$size_class}'>"; $output = apply_filters( 'gallery_style', $gallery_style . "\n\t\t" . $gallery_div ); $i = 0; foreach ( $attachments as $id => $attachment ) { $link = isset($attr['link']) && 'file' == $attr['link'] ? wp_get_attachment_link($id, $size, false, false) : wp_get_attachment_link($id, $size, true, false); $output .= "<{$itemtag} class='gallery-item'>"; $output .= " <{$icontag} class='gallery-icon'> $link </{$icontag}>"; if ( $captiontag && trim($attachment->post_excerpt) ) { $output .= ""; } $output .= "</{$itemtag}>"; if ( $columns > 0 && ++$i % $columns == 0 ) $output .= ''; } $output .= " <div style='clear:both;'></div> </div>\n"; return $output; } ?> 

ну его все еще там в новой версии wordpress по 3.8 heres исправление, которое я сделал для удаления, использовал тот же код выше, но добавил пару строк

 remove_shortcode( "gallery" ); add_shortcode( "gallery" , "my_own_gallary" ); function my_own_gallary( $attr ) { global $post; static $instance = 0; $instance++; $output = apply_filters('post_gallery', '', $attr); if ( $output != '' ) { return $output; } if ( isset( $attr['orderby'] ) ) { $attr['orderby'] = sanitize_sql_orderby( $attr['orderby'] ); if ( !$attr['orderby'] ) unset( $attr['orderby'] ); } extract(shortcode_atts(array( 'order' => 'ASC', 'orderby' => 'menu_order ID', 'id' => $post->ID, 'itemtag' => 'dl', 'icontag' => 'dt', 'captiontag' => 'dd', 'columns' => 3, 'size' => 'thumbnail', 'include' => '', 'exclude' => '' ), $attr)); $id = intval($id); if ( 'RAND' == $order ) { $orderby = 'none'; } if ( !empty($include) ) { $include = preg_replace( '/[^0-9,]+/', '', $include ); $_attachments = get_posts( array('include' => $include, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby) ); $attachments = array(); foreach ( $_attachments as $key => $val ) { $attachments[$val->ID] = $_attachments[$key]; } } elseif ( !empty($exclude) ) { $exclude = preg_replace( '/[^0-9,]+/', '', $exclude ); $attachments = get_children( array('post_parent' => $id, 'exclude' => $exclude, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby) ); } else { $attachments = get_children( array('post_parent' => $id, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby) ); } if ( empty($attachments) ) { return ''; } if ( is_feed() ) { $output = "\n"; foreach ( $attachments as $att_id => $attachment ) $output .= wp_get_attachment_link($att_id, $size, true) . "\n"; return $output; } $itemtag = tag_escape($itemtag); $captiontag = tag_escape($captiontag); $columns = intval($columns); $itemwidth = $columns > 0 ? floor(100/$columns) : 100; $float = is_rtl() ? 'right' : 'left'; $selector = "gallery-".$instance; $gallery_style = $gallery_div = ''; if ( apply_filters( 'use_default_gallery_style', true ) ) $gallery_style = " <style type='text/css'> #".$selector." .gallery-item { width: ".$itemwidth."%; } </style>"; $size_class = sanitize_html_class( $size ); $gallery_div = "<div id='$selector' class='gallery galleryid-".$id." gallery-columns-".$columns." gallery-size-".$size_class."'>"; $output = apply_filters( 'gallery_style', $gallery_style . "\n\t\t" . $gallery_div ); $i = 0; foreach ( $attachments as $id => $attachment ) { $link = isset($attr['link']) && 'file' == $attr['link'] ? wp_get_attachment_link($id, $size, false, false) : wp_get_attachment_link($id, $size, true, false); $output .= "<".$itemtag." class='gallery-item'>"; $output .= " <".$icontag." class='gallery-icon'> $link </".$icontag.">"; /* added the <dd> here to fix validation error */ if ( $captiontag && trim($attachment->post_excerpt) ) { $output .= " <".$captiontag." class='wp-caption-text gallery-caption'> " . wptexturize($attachment->post_excerpt) . " </".$captiontag.">"; } else { $output .= " <".$captiontag." class='wp-caption-text gallery-caption' style='display:none;'></".$captiontag.">"; } $output .= "</".$itemtag.">"; if ( $columns > 0 && ++$i % $columns == 0 ) $output .= ''; } $output .= " <div style='clear:both;'></div> </div>\n"; return $output; } 

add_filter( 'use_default_gallery_style', '__return_false' );