Intereting Posts
Доступ к корню сайта из папки тем Как восстановить ранее сохраненную опцию? Сообщения CPT в раскрывающемся списке в мета-окне на странице не возвращают идентификатор сообщения Как получить ссылки на последние N сообщений в определенной категории? Пользовательские категории заказов в панели управления администратора Как проверить каталог, в котором установлен WordPress? Выложить метатет post_query? Как использовать запрос WHERE NOT EXISTS, чтобы избежать дублирования записи с помощью $ wpdb для сохранения в пользовательской таблице? Сортировка по умолчанию в столбцах администратора с метаданной скрывает черновики сообщений с пустым значением даты Есть ли действие, когда пермалники перестраиваются? Есть ли способ вытащить первое изображение в цикле, а не все другие изображения? Является ли функция wp_read_audio_metadata () устаревшей? используйте wp_get_attachment_image () для отображения вложений Относительный путь WordPress Получать сообщения после сегодняшнего дня (предстоящие события)

Редактирование встроенного ярлыка галереи для фильтрации по категориям

Поэтому я пытаюсь добавить или изменить встроенный короткий код галереи, чтобы он мог отображать все изображения определенной категории, которые мы будем называть внутренней медициной, с идентификатором 2, но также иметь такую ​​же функциональность, если бы я хотел захватить все изображения другой категории, можно сказать, называется центр города с id 4, где я могу начать с этого? Вот код для встроенного короткого кода, который я пытаюсь редактировать.

add_shortcode('gallery', 'gallery_shortcode'); /** * Builds the Gallery shortcode output. * * This implements the functionality of the Gallery Shortcode for displaying * WordPress images on a post. * * @since 2.5.0 * * @staticvar int $instance * * @param array $attr { * Attributes of the gallery shortcode. * * @type string $order Order of the images in the gallery. Default 'ASC'. Accepts 'ASC', 'DESC'. * @type string $orderby The field to use when ordering the images. Default 'menu_order ID'. * Accepts any valid SQL ORDERBY statement. * @type int $id Post ID. * @type string $itemtag HTML tag to use for each image in the gallery. * Default 'dl', or 'figure' when the theme registers HTML5 gallery support. * @type string $icontag HTML tag to use for each image's icon. * Default 'dt', or 'div' when the theme registers HTML5 gallery support. * @type string $captiontag HTML tag to use for each image's caption. * Default 'dd', or 'figcaption' when the theme registers HTML5 gallery support. * @type int $columns Number of columns of images to display. Default 3. * @type string|array $size Size of the images to display. Accepts any valid image size, or an array of width * and height values in pixels (in that order). Default 'thumbnail'. * @type string $ids A comma-separated list of IDs of attachments to display. Default empty. * @type string $include A comma-separated list of IDs of attachments to include. Default empty. * @type string $exclude A comma-separated list of IDs of attachments to exclude. Default empty. * @type string $link What to link each image to. Default empty (links to the attachment page). * Accepts 'file', 'none'. * } * @return string HTML content to display gallery. */ function gallery_shortcode( $attr ) { $post = get_post(); static $instance = 0; $instance++; if ( ! empty( $attr['ids'] ) ) { // 'ids' is explicitly ordered, unless you specify otherwise. if ( empty( $attr['orderby'] ) ) { $attr['orderby'] = 'post__in'; } $attr['include'] = $attr['ids']; } /** * Filters the default gallery shortcode output. * * If the filtered output isn't empty, it will be used instead of generating * the default gallery template. * * @since 2.5.0 * @since 4.2.0 The `$instance` parameter was added. * * @see gallery_shortcode() * * @param string $output The gallery output. Default empty. * @param array $attr Attributes of the gallery shortcode. * @param int $instance Unique numeric ID of this gallery shortcode instance. */ $output = apply_filters( 'post_gallery', '', $attr, $instance ); if ( $output != '' ) { return $output; } $html5 = current_theme_supports( 'html5', 'gallery' ); $atts = shortcode_atts( array( 'order' => 'ASC', 'orderby' => 'menu_order ID', 'id' => $post ? $post->ID : 0, 'itemtag' => $html5 ? 'figure' : 'dl', 'icontag' => $html5 ? 'div' : 'dt', 'captiontag' => $html5 ? 'figcaption' : 'dd', 'columns' => 3, 'size' => 'thumbnail', 'include' => '', 'exclude' => '', 'link' => '' ), $attr, 'gallery' ); $id = intval( $atts['id'] ); if ( ! empty( $atts['include'] ) ) { $_attachments = get_posts( array( 'include' => $atts['include'], 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $atts['order'], 'orderby' => $atts['orderby'] ) ); $attachments = array(); foreach ( $_attachments as $key => $val ) { $attachments[$val->ID] = $_attachments[$key]; } } elseif ( ! empty( $atts['exclude'] ) ) { $attachments = get_children( array( 'post_parent' => $id, 'exclude' => $atts['exclude'], 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $atts['order'], 'orderby' => $atts['orderby'] ) ); } else { $attachments = get_children( array( 'post_parent' => $id, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $atts['order'], 'orderby' => $atts['orderby'] ) ); } if ( empty( $attachments ) ) { return ''; } if ( is_feed() ) { $output = "\n"; foreach ( $attachments as $att_id => $attachment ) { $output .= wp_get_attachment_link( $att_id, $atts['size'], true ) . "\n"; } return $output; } $itemtag = tag_escape( $atts['itemtag'] ); $captiontag = tag_escape( $atts['captiontag'] ); $icontag = tag_escape( $atts['icontag'] ); $valid_tags = wp_kses_allowed_html( 'post' ); if ( ! isset( $valid_tags[ $itemtag ] ) ) { $itemtag = 'dl'; } if ( ! isset( $valid_tags[ $captiontag ] ) ) { $captiontag = 'dd'; } if ( ! isset( $valid_tags[ $icontag ] ) ) { $icontag = 'dt'; } $columns = intval( $atts['columns'] ); $itemwidth = $columns > 0 ? floor(100/$columns) : 100; $float = is_rtl() ? 'right' : 'left'; $selector = "gallery-{$instance}"; $gallery_style = ''; 

Таким образом, цель этого могла бы поставить или или, тем не менее, так, чтобы он отображал все изображения в определенной категории, поэтому любая помощь была бы очень оценена!

отредактируйте так, как я хочу, чтобы он работал, чтобы иметь возможность разместить и иметь все изображения или самые последние 20 самых последних сообщений в почте или в другом примере будет галерея [галерея post_type = " "category =" medicine "], и то, что я использую, чтобы сделать эти пользовательские типы / категории сообщений с помощью типов ToolSet плагина

 function gallery_shortcode( $attr ) { $post = get_post(); static $instance = 0; $instance++; if ( ! empty( $attr['ids'] ) ) { // 'ids' is explicitly ordered, unless you specify otherwise. if ( empty( $attr['orderby'] ) ) { $attr['orderby'] = 'post__in'; } $attr['include'] = $attr['ids']; } /** * Filters the default gallery shortcode output. * * If the filtered output isn't empty, it will be used instead of generating * the default gallery template. * * @since 2.5.0 * @since 4.2.0 The `$instance` parameter was added. * * @see gallery_shortcode() * * @param string $output The gallery output. Default empty. * @param array $attr Attributes of the gallery shortcode. * @param int $instance Unique numeric ID of this gallery shortcode instance. */ $output = apply_filters( 'post_gallery', '', $attr, $instance ); if ( $output != '' ) { return $output; } $html5 = current_theme_supports( 'html5', 'gallery' ); $atts = shortcode_atts( array( 'order' => 'ASC', 'orderby' => 'menu_order ID', 'id' => null, 'itemtag' => $html5 ? 'figure' : 'dl', 'icontag' => $html5 ? 'div' : 'dt', 'captiontag' => $html5 ? 'figcaption' : 'dd', 'columns' => 3, 'size' => 'thumbnail', 'include' => '', 'exclude' => '', 'link' => '', 'category' => null, 'post_type' => 'uc-general-gallery', 'img' => null ), $attr, 'gallery' ); $ids = array(); ob_start(); if ($atts['id'] != null ) { $id_str = preg_replace('/\s+/', '', $atts['id']); // strip whitespace $ids = explode(',', $id_str); ?> <?php foreach($ids as $id): ?> <?php if(is_numeric($id)): ?> <?php endif; ?> <?php endforeach; ?> <?php } else if($atts['category'] != null) { $cat_str = preg_replace('/\s+/', '', $atts['category']); // strip whitespace $args = array( 'post_type' => $atts['post_type'], 'order' => 'DESC', 'category_name' => $cat_str, 'posts_per_page' => 999 ); $the_query = new WP_Query( $args ); if($the_query->have_posts() ) : ?> <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?> <?php endwhile; ?> <?php endif; } if ( ! empty( $atts['include'] ) ) { $_attachments = get_posts( array( 'include' => $atts['include'], 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $atts['order'], 'orderby' => $atts['orderby'] ) ); $attachments = array(); foreach ( $_attachments as $key => $val ) { $attachments[$val->ID] = $_attachments[$key]; } } elseif ( ! empty( $atts['exclude'] ) ) { $attachments = get_children( array( 'post_parent' => $id, 'exclude' => $atts['exclude'], 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $atts['order'], 'orderby' => $atts['orderby'] ) ); } else { $attachments = get_children( array( 'post_parent' => $id, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $atts['order'], 'orderby' => $atts['orderby'] ) ); } if ( empty( $attachments ) ) { return ''; } if ( is_feed() ) { $output = "\n"; foreach ( $attachments as $att_id => $attachment ) { $output .= wp_get_attachment_link( $att_id, $atts['size'], true ) . "\n"; } return $output; } $itemtag = tag_escape( $atts['itemtag'] ); $captiontag = tag_escape( $atts['captiontag'] ); $icontag = tag_escape( $atts['icontag'] ); $valid_tags = wp_kses_allowed_html( 'post' ); if ( ! isset( $valid_tags[ $itemtag ] ) ) { $itemtag = 'dl'; } if ( ! isset( $valid_tags[ $captiontag ] ) ) { $captiontag = 'dd'; } if ( ! isset( $valid_tags[ $icontag ] ) ) { $icontag = 'dt'; } $columns = intval( $atts['columns'] ); $itemwidth = $columns > 0 ? floor(100/$columns) : 100; $float = is_rtl() ? 'right' : 'left'; $selector = "gallery-{$instance}"; $gallery_style = ''; 

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

редактировать

Неважно! мой код неисправен и отображает каждое добавленное изображение вместо того, чтобы идти по категории, был бы простой способ исправить это?

Существуют различные способы запуска другого WP_Query с налоговым запросом и сбора идентификаторов в атрибут include WP_Query галереи.

Давайте попробуем другой подход, не запустив вторичный WP_Query .

Собственная галерея: поддержка таксономии и атрибутов терминов

Мы вводим следующие пользовательские атрибуты shortcode галереи:

 [gallery taxonomy="media_category" term="people"] 

Вот демо-плагин, который поддерживает это через фильтры pre_get_posts действие pre_get_posts :

 <?php /** * Plugin Name: Native Gallery Shortcode With Taxonomy And Term Filter Support * Description: Add support for [gallery taxonomy='some-taxonomy' term="some-term"] * Plugin URI: http://wordpress.stackexchange.com/a/257801/26350 */ namespace WPSE\Q257743; class Gallery { private $term; private $taxonomy; public function init() { add_filter( 'post_gallery', [$this, 'post_gallery'], 10, 2 ); } public function post_gallery( $html, $attr ) { // Check user input for term and taxonomy if( empty( $attr['term'] ) || empty( $attr['taxonomy'] ) ) return $html; // Validate taxonomy if( ! taxonomy_exists( $attr['taxonomy'] ) ) return esc_html__( "Taxonomy doesn't exists!", 'wpse-257743' ); // Validate term if( ! term_exists( $attr['term'] , $attr['taxonomy'] ) ) return esc_html__( "Term doesn't exists!", 'wpse-257743' ); $this->term = $attr['term']; $this->taxonomy = $attr['taxonomy']; // Activate customization add_filter( 'shortcode_atts_gallery', [$this, 'gallery_atts'] ); add_action( 'pre_get_posts', [$this, 'pre_get_posts'] ); return $html; } public function gallery_atts( $pairs ) { // Set include to a temporary non empty value (that becomes 0) $pairs['include'] = ' '; // Only run once per gallery remove_filter( current_filter(), __FUNCTION__ ); return $pairs; } public function pre_get_posts( \WP_Query $q ) { // Make sure it's attachments query if( 'attachment' !== $q->get( 'post_type' ) ) return; $post__in = $q->get( 'post__in' ); // Target queries with post__in (include) if ( empty( $post__in ) ) return; // Check for our temporary 0 value if( 1 === count( $post__in ) && 0 != $post__in[0] ) return; $q->set( 'post__in', null ); // Set the taxonomy query: $q->set( 'tax_query', [ [ 'taxonomy' => $this->taxonomy, 'field' => 'slug', 'terms' => $this->term, ] ] ); // Adjust the number of images to eg max 100 $q->set( 'posts_per_page', 100 ); // Only run once per gallery remove_action( current_action(), __FUNCTION__ ); } } add_action( 'init', [new Gallery, 'init' ] ); 

Обратите внимание, что здесь мы добавили предел 100 изображений.

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