WordPress插件:在the_content中找到<! - more - >

时间:2009-05-20 11:44:51

标签: wordpress filter wordpress-plugin

我正在编写一个过滤 the_content 的WordPress插件,我想使用<!--more-->标记,但它似乎已被剥离了它到达了我。这似乎不是过滤器,而是WordPress工作方式的功能。

我当然可以从数据库中重新加载已经加载的内容,但听起来这可能会导致其他麻烦。在没有移除<!--more-->的情况下,有没有什么好方法可以获取原始内容?

3 个答案:

答案 0 :(得分:6)

当您的插件投放时,<!--more-->已转换为<span id="more-1"></span>

这是我在我的插件中使用的,它在<!--more-->标记之后立即注入了一些标记:

add_filter('the_content', 'inject_content_filter', 999);

function inject_content_filter($content) {
  $myMarkup = "my markup here<br>";
  $content = preg_replace('/<span id\=\"(more\-\d+)"><\/span>/', '<span id="\1"></span>'."\n\n". $myMarkup ."\n\n", $content);
  return $content;
}

答案 1 :(得分:1)

您可以使用以下代码:

!is_single()将避免在View Post页面中显示更多链接。

add_filter('the_content', 'filter_post_content');
function filter_post_content($content,$post_id='') {

        if ($post_id=='') {
            global $post;
            $post_id = $post->ID;
        }

        // Check for the "more" tags
        $more_pos = strpos($filtered_content, '<!--more-->');
        if ($more_pos && !is_single()) {
            $filtered_content = substr($filtered_content, 0, $more_pos);

            $replace_by = '<a href="' . get_permalink($post_id) . '#more-' . $post_id 
                    . '" class="more-link">Read More <span class="meta-nav">→</span></a>';

            $filtered_content = $filtered_content . $replace_by;
        }

        return $filtered_content;
    }

答案 2 :(得分:0)

基于Frank Farmer's answer我解决了在single.php文件中生成更多标记(<span id="more-...)之后添加缩略图照片:

// change more tag to post's thumbnail in single.php
add_filter('the_content', function($content)
{
    if(has_post_thumbnail())
    {
        $post_thumbnail = get_the_post_thumbnail(get_the_ID(), 'thumbnail', array('class'=>'img img-responsive img-thumbnail', 'style'=>'margin-top:5px;'));
        $content = preg_replace('/<span id\=\"(more\-\d+)"><\/span>/', '<span id="\1"></span>'.$post_thumbnail, $content);
    }
    return $content;
}, 999);