WP_GET_ATTACH_LINK将标题属性添加到图像周围的链接标签

时间:2015-03-17 作者:sc11423

我有一个适用于wordpress图像的Lightbox(colorbox)解决方案。然而,我想在lightbox图像中添加一个基于图像标题和摄影师姓名的自定义标题。

将标题属性添加到图像链接时,此操作非常有效。

但是,如何将图像标题添加到图像链接中。

以便:

<a href="link-to-attachment.jpg" rel="img-lightbox"><img..></a>
成为

<a href="link-to-attachment.jpg" title="caption of the image" rel="img-lightbox"><img..></a>
为了添加正确的rel和class属性和值,我使用了\\u内容过滤器。

通过这种方式,我可以添加所有图像都相同的默认值。然而,对于lightbox标题,我还需要知道我正在更改哪个附件图像链接以创建正确的标题。因此,\\u内容没有;它只是更改了所有的HREF,而不知道哪个链接与哪个附件id确切相关。

我发现了很多使用wp\\u get\\u attachment\\u link过滤器的解决方案。但我似乎无法让它工作。

我希望我犯了一个简单的错误。启动basic时:我只是添加了一个过滤器,它只不过是记录一些内容并返回原始值。

问题是,在包含图像的页面上似乎没有调用过滤器。

以下代码似乎没有任何作用。我将其添加到我的函数中。php

function add_rel_to_gallery($link, $id) {
  error_log("SIMPLE TEST");
  return $link;
}
add_filter( \'wp_get_attachment_link\', \'add_rel_to_gallery\', 10, 2 );
我做错了什么?或者对如何解决这个问题有什么建议?

2 个回复
最合适的回答,由SO网友:sc11423 整理而成

我找到了解决办法。由于wp\\u get\\u attachment\\u链接似乎不起作用,我在已经使用的其他过滤器中解决了这个问题:img\\u caption\\u shortcode

在此筛选函数中,内容变量包含图像链接标记。此处a刚刚使用简单的搜索和替换添加了标题:

$content = str_replace("<a","<a title=\'".$attr[\'caption\'] . $credit."\'", $content);
这样它工作得很好。

SO网友:TCode

我修改了gallery的短代码,以包括lightbox数据标题和数据lightbox属性,如下所示。

将此弹出到您的函数中。php文件,然后使用[lightboxgallery]而不是通常的[gallery]——所有其他短代码选项都是相同的。

还从缩略图库中删除了默认标题显示。

如果要显示标题而不是标题字段,请将$attachment->post\\u extract替换为$attachment->post\\u titleEnjoy!

add_shortcode(\'lightboxgallery\', \'lightbox_gallery_shortcode\');

/**
 * Builds the Modified Gallery shortcode output with lightbox attributes.
 *
 * @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 lightbox_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\'];
        }

        /**
         * Filter 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 = \'\';

        /**
         * Filter whether to print default gallery styles.
         *
         * @since 3.1.0
         *
         * @param bool $print Whether to print default gallery styles.
         *                    Defaults to false if the theme supports HTML5 galleries.
         *                    Otherwise, defaults to true.
         */
        if ( apply_filters( \'use_default_gallery_style\', ! $html5 ) ) {
                $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;
                        }
                        /* see gallery_shortcode() in wp-includes/media.php */
                </style>\\n\\t\\t";
        }

        $size_class = sanitize_html_class( $atts[\'size\'] );
        $gallery_div = "<div id=\'$selector\' class=\'gallery galleryid-{$id} gallery-columns-{$columns} gallery-size-{$size_class}\'>";

        /**
         * Filter the default gallery shortcode CSS styles.
         *
         * @since 2.5.0
         *
         * @param string $gallery_style Default CSS styles and opening HTML div container
         *                              for the gallery shortcode output.
         */
        $output = apply_filters( \'gallery_style\', $gallery_style . $gallery_div );

        $i = 0;
        foreach ( $attachments as $id => $attachment ) {

                $attr = ( trim( $attachment->post_excerpt ) ) ? array( \'aria-describedby\' => "$selector-$id" ) : \'\';
                if ( ! empty( $atts[\'link\'] ) && \'file\' === $atts[\'link\'] ) {
                        $image_output = wp_get_attachment_link( $id, $atts[\'size\'], false, false, false, $attr );
                        $image_output = str_replace(\'<a href\', \'<a data-lightbox="gallery-\'. $post->ID .\'" data-title="\'. wptexturize($attachment->post_excerpt) .\'" href\', $image_output);
                } elseif ( ! empty( $atts[\'link\'] ) && \'none\' === $atts[\'link\'] ) {
                        $image_output = wp_get_attachment_image( $id, $atts[\'size\'], false, $attr );
                } else {
                        $image_output = wp_get_attachment_link( $id, $atts[\'size\'], true, false, false, $attr );
                }
                $image_meta  = wp_get_attachment_metadata( $id );

                $orientation = \'\';
                if ( isset( $image_meta[\'height\'], $image_meta[\'width\'] ) ) {
                        $orientation = ( $image_meta[\'height\'] > $image_meta[\'width\'] ) ? \'portrait\' : \'landscape\';
                }
                $output .= "<{$itemtag} class=\'gallery-item\'>";
                $output .= "
                        <{$icontag} class=\'gallery-icon {$orientation}\'>
                                $image_output
                        </{$icontag}>";
                $output .= "</{$itemtag}>";
                if ( ! $html5 && $columns > 0 && ++$i % $columns == 0 ) {
                        $output .= \'<br style="clear: both" />\';
                }
        }

        if ( ! $html5 && $columns > 0 && $i % $columns !== 0 ) {
                $output .= "
                        <br style=\'clear: both\' />";
        }

        $output .= "
                </div>\\n";

        return $output;
}

结束

相关推荐

Siteurl code for links

我正在为我的朋友业务开发一个wordpress网站,我正在我的个人服务器上开发它,然后在完成后将其导出并导入到他的服务器上。我在其中的一些页面中添加了som按钮,这些按钮可以链接到此网站上的其他页面。它基本上使用了代码:[按钮链接=”。然而,我的问题是,当它移动到我的朋友服务器时,它将位于与我正在使用的URL不同的URL下,这意味着按钮的当前链接将不起作用。是否有任何类型的代码可用于使用siteurl?因此,基本上,当站点托管在其他URL上时,它将使用该URL。希望这有意义!干杯谢谢!:)