添加过滤器和更改图片库的输出标题(_F)

时间:2012-11-30 作者:cachaito

我只想更改本机WP Gallery的一个输出(在media.php中)

关于粉碎杂志(link) 作者建议更改整个gallery\\u快捷码功能。但我想知道是否可以只更改特定的输出($captiontag)

我写道:

add_filter( \'captiontag\', \'my_captiontag\' );

function my_captiontag( $captiontag ) {
 $output .= "
  <{$captiontag} class=\'wp-caption-text gallery-caption\'><p>
  " . wptexturize($attachment->post_excerpt) . "
  </p></{$captiontag}>";
}
但它不起作用:(

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

没有调用筛选器挂钩captiontag. 您可以通过指定captiontag 插入时的选项[gallery] 短代码。

gallery shortcode codex page:

captiontag

用于括住每个标题的XHTML标记的名称。默认值为“dd”。例如,要将库标记更改为使用div、span和p标记,请执行以下操作:

[gallery itemtag="div" icontag="span" captiontag="p"]
更新:以下代码将覆盖默认值[gallery] 输出它基本上是gallery_shotcode() 只需一次修改即可显示包装在中的图像标题<h3> 图像前的标记:

add_filter(\'post_gallery\', \'my_gallery_shortcode\', 10, 2);

function my_gallery_shortcode($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\'>";
        // Here we add the image title
        $output .= "
            <{$icontag} class=\'gallery-icon\'>
                <h3>$attachment->post_title</h3>
                $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;
}

SO网友:fuxia

没有必要复制gallery 短代码。只需在本机处理程序的输出和最终输出之间设置筛选函数。

为此,劫持短代码处理程序,然后运行preg_replace_callback() 超过输出。

add_action( \'after_setup_theme\', \'wpse_74515_replace_gallery_shortcode\' );

/**
 * Replace the default shortcode handlers.
 *
 * @wp-hook after_setup_theme
 * @return  void
 */
function wpse_74515_replace_gallery_shortcode()
{
    // overwrite the native shortcode handler
    add_shortcode( \'gallery\', \'wpse_74515_gallery_shortcode\' );
}
/**
 * Create a filtered gallery output.
 *
 * @wp-hook gallery
 * @param   array $attr
 * @return  string
 */
function wpse_74515_gallery_shortcode( $attr )
{
    // Default value in WordPress.
    $captiontag = \'dd\';

    // User value.
    isset ( $attr[\'captiontag\'] ) && $captiontag = $attr[\'captiontag\'];

    // Let WordPress create the regular gallery …
    $gallery = gallery_shortcode( $attr );

    // change the content of the caption
    $gallery = preg_replace_callback(
        \'~(<\' . $captiontag . \'.*>)(.*)(</\' . $captiontag . \'>)~mUus\',
        \'wpse_74515_gallery_callback\',
        $gallery
    );

    return $gallery;
}
/**
 * Change the result of the regex match from wpse_74515_gallery_shortcode.
 *
 * @param  array $m matches
 * @return string
 */
function wpse_74515_gallery_callback( $m )
{
    return $m[1] . wptexturize( $m[2] ) . $m[3];
}
类似帖子How do i link gallery thumbnails to different url\'s using the wp native gallery?
  • Using preg_replace to separate gallery from the_content?
  • How can I make all gallery images to open in a new window?
  • 结束

    相关推荐

    如何访问调用Apply_Filters()的函数中的变量?

    我试图根据调用的函数中的变量是否apply_filters() 等于特定值。该变量不会传递给apply_filters() 参数。这或许可以解释我的意思:// function in wordpress core function get_var_b() { // generating $var_a $var_a = \"a\"; // some code ... $var_b = apply_filters(\'get_var_b\