Php 修改了Wordpress函数,在标题的第一个单词周围加了一个空格?

Php 修改了Wordpress函数,在标题的第一个单词周围加了一个空格?,php,wordpress,preg-replace,Php,Wordpress,Preg Replace,我正在尝试使用一个函数,在Wordpress站点中每个帖子标题的第一个单词周围添加一个“span”,并发现了一个问题。当H2元素中有链接时,第二个答案中的函数可以正常工作 但是在我的网站上,我没有使用帖子标题作为链接,所以找到的解决方案不起作用。我试图提出一种新的preg-replace模式,以跳过对链接部分的检测,但一直未能实现 基本上,我想要这个: <h2><?php the_title(); ?></h2> or <h2>Converted

我正在尝试使用一个函数,在Wordpress站点中每个帖子标题的第一个单词周围添加一个“span”,并发现了一个问题。当H2元素中有链接时,第二个答案中的函数可以正常工作

但是在我的网站上,我没有使用帖子标题作为链接,所以找到的解决方案不起作用。我试图提出一种新的preg-replace模式,以跳过对链接部分的检测,但一直未能实现

基本上,我想要这个:

<h2><?php the_title(); ?></h2> or <h2>Converted post title</h2>
或转换后的文章标题
。。。为此:

<h2><span>Converted</span> post title</h2>
转换后的文章标题

您可以使用以下内容:

<?php
$title = get_the_title();
if(substr($title,0)>-1){
    $first_word = substr($title,0,strpos($title," "));
    $after_that = substr($title,strpos($title," ")+1);
}else{
    $first_word = $title;
    $after_that = "";
}
echo "<span>".$first_word."</span> " . $after_that;
?>

我建议您在javascript中这样做,这样可以减少服务器的处理/cpu使用。你仍然会得到同样的结果

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.js" type="text/javascript"></script>

<script type="text/javascript">
    $(function() {
        $('h2.title').each( function (){
            var obj_h2 = $(this);
            var h2_title = obj_h2.html();
            var words = h2_title.split(' ');
            words[0] = '<span>' + words[0] + '</span>'

            obj_h2.html( words.join( ' ' ) );
        } );
    });
</script>

$(函数(){
$('h2.title')。每个(函数(){
var obj_h2=$(本);
var h2_title=obj_h2.html();
var words=h2_标题拆分(“”);
字[0]=''+字[0]+''
obj_h2.html(words.join(“”));
} );
});

*以前的代码版本。。
http://jsbin.com/uguhel/edit#html,live

使用woodpress挂钩和过滤器的最佳方式。这样,您就可以使用_title()函数,而无需额外的代码

将此代码放入主题文件夹中的functions.php中。就这些

    function add_label_to_post_title( $title = '' ) {
       if(trim($title) != "")
       {
      $ARR_title = explode(" ", $title);
      
      if(sizeof($ARR_title) > 1 )
          {
             $first_word = "<span>".$ARR_title['0']."</span>";
             unset($ARR_title['0']);
             return $first_word. implode(" ", $ARR_title);
          }
          else
          {
              return "<span>{$title}</span>";
          }
       }
       return $title;
}
add_filter( 'the_title', 'add_label_to_post_title' );
函数将标签添加到帖子标题($title=''){
如果(修剪($title)!=“”)
{
$ARR_title=分解(“,$title”);
如果(sizeof($ARR_title)>1)
{
$first_word=“”。$ARR_title['0']”;
未设置($ARR_title['0']);
返回$first_word.introde(“,$ARR_title”);
}
其他的
{
返回“{$title}”;
}
}
返回$title;
}
添加过滤器(“标题”、“将标签添加到帖子标题”);

,我已经为单字标题更新了它。谢谢@LawrenceCherone。您应该在该变量后面添加空格,这样单个单词就不会在结尾添加额外的空格。如果您想
减少处理/cpu
您就不会使用wordpress;pThanks@fedmich。到目前为止,这是我的首选答案,尽管它不是通过函数实现的,而且pre-replace wich是我所期望的,但它是迄今为止最有用的,因为我只需编写一次代码,并将其包含在所有地方,而无需进一步修改我的模板。您好@fedmich。这个实现设置了一个奇数限制。一旦选择了一个H2元素,并且替换了它的html内容,文档中的每个H2都会继承相同的html内容,即它们都在其中呈现相同的文本。有解决办法吗?嗯,所以你计划在多个h2标签上使用它。看起来,这是另一种情况,那么我将对此进行另一种修改。等一下:)这将输出
转换后的帖子标题
@Lawrence Cherone我已经为您修改了函数。现在应该可以了。很有趣,谢谢!然而,还有两个问题。我认为在第8行,最后一个跨度应该是最后一个跨度。另一件事是,当实现时,模板中的许多其他元素(不仅仅是h2)都会得到应用的效果。实际上,它创建了几个新的h2元素。@Sergio Majluf它依赖于模板循环。循环中已经有了可以从上述代码中删除的标记。这应该没问题。@FazleElahee,正如Sergio提到的-请关闭第8行中的跨度。谢谢