Intereting Posts
Включить изменения для настраиваемого типа сообщений Группировать по настраиваемому значению поля (время начала и окончания) Различные модераторы для разных категорий сообщений Что произойдет, если я удалю все записи типа вложений в базе данных? Мои результаты поиска показывают только 5 сообщений? Графические библиотеки для WordPress $ wpdb-> insert () и значения для столбцов Datetime? Как обрезать высоту эскиза для авто с заданной шириной Настройка постоянных ссылок для продукта woocommerce Как создать настраиваемую страницу параметров, которая сохраняет данные в сериализованном формате? Как удалить определенный контент из содержимого в rss post importer Перестановка метаблоков панели мониторинга с использованием плагина / functions.php Пользовательский пользователь WordPress постоянная ссылка Несколько циклов без повторяющегося содержимого Значение ключа meta_query из массива

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

Поэтому я пытаюсь добавить или изменить встроенный короткий код галереи, чтобы он мог отображать все изображения определенной категории, которые мы будем называть внутренней медициной, с идентификатором 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 = ''; 

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

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

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

Solutions Collecting From Web of "Редактирование встроенного ярлыка галереи для фильтрации по категориям"

Существуют различные способы запуска другого 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 изображений.

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