4

尝试从帖子内容中删除图库短代码并保存在变量中以在模板的其他地方使用。新的 Wordpress 图库工具非常适合选择他们想要的图像并分配标题,希望使用它来创建图库,然后将其从前端的内容中拉出来。

所以这个小片段可以很好地删除画廊和重新应用格式......但是我想保存那个画廊短代码。

$content = strip_shortcodes( get_the_content() );
$content = apply_filters('the_content', $content);
echo $content;

希望保存短代码,以便可以将其解析为数组并用于在前端重新创建自定义画廊设置。我试图保存的这个简码的一个例子是......

[gallery ids="1079,1073,1074,1075,1078"]

任何建议将不胜感激。

4

3 回答 3

6

从帖子内容中获取 First Gallery 简码的功能:

// Return first gallery shortcode
function get_shortcode_gallery ( $post = 0 ) {
    if ( $post = get_post($post) ) {
        $post_gallery = get_post_gallery($post, false);
        if ( ! empty($post_gallery) ) {
            $shortcode = "[gallery";
            foreach ( $post_gallery as $att => $val ) {
                if ( $att !== 'src') {
                    if ( $att === 'size') $val = "full";        // Set custom attribute value
                    $shortcode .= " ". $att .'="'. $val .'"';   // Add attribute name and value ( attribute="value")
                }
            }
            $shortcode .= "]";
            return $shortcode;
        }
    }
}

// Example of how to use: 
echo do_shortcode( get_shortcode_gallery() );

从帖子内容中删除第一个画廊简码的功能:

// Deletes first gallery shortcode and returns content
function  strip_shortcode_gallery( $content ) {
    preg_match_all( '/'. get_shortcode_regex() .'/s', $content, $matches, PREG_SET_ORDER );
    if ( ! empty( $matches ) ) {
        foreach ( $matches as $shortcode ) {
            if ( 'gallery' === $shortcode[2] ) {
                $pos = strpos( $content, $shortcode[0] );
                if ($pos !== false)
                    return substr_replace( $content, '', $pos, strlen($shortcode[0]) );
            }
        }
    }
    return $content;
}

// Example of how to use:
$content = strip_shortcode_gallery( get_the_content() );                                        // Delete first gallery shortcode from post content
$content = str_replace( ']]>', ']]>', apply_filters( 'the_content', $content ) );            // Apply filter to achieve the same output that the_content() returns
echo $content;
于 2013-10-11T16:17:34.330 回答
2

只需使用 get_shortcode_regex():

<?php
$pattern = get_shortcode_regex();
preg_match_all('/'.$pattern.'/s', $post->post_content, $shortcodes);
?>

这将返回您内容中所有短代码的数组,然后您可以在任何感觉的地方输出,如下所示:

<?php
echo do_shortcode($shortcodes[0][1]);
?>

同样,您可以使用数组条目来检查内容中的短代码并使用 str_replace() 删除它们:

<?php
$content = $post->post_content;
$content = str_replace($shortcodes[0][1],'',$content);
?>
于 2014-06-06T13:53:33.387 回答
0

类似的东西$gallery = do_shortcode('[gallery]');可能会起作用。

于 2013-06-21T01:18:10.197 回答