0

POST TITLE で投稿タグのいずれかを見つけようとしており、それに css (太字) を追加するためにpreg_replacea で囲まれたタグと一致しています。span最終結果は、すべてのタグが太字になった投稿タイトルになります。

        <h2 class="entry-title">
            <a href="<?php the_permalink(); ?>" rel="bookmark" title="Permalink to <?php the_title(); ?>">
                <?php 
                    $titlename = the_title();
                    $tags = array(just_tags());
                    foreach($tags as $tag) {
                        $displaytitle = preg_replace("$tag", "<span class=\"larger\">$tag</span>", $titlename);
                    }
                    echo $displaytitle;
                ?>
            </a>
        </h2>

コードでわかるように、タグ no$beforeとだけを取得するようにいくつかの関数を変更しました$after

function get_just_the_tag_list() {
    return get_the_term_list('post_tag');
}

function just_tags() {
    echo get_just_the_tag_list();
}
4

3 に答える 3

1

でテキスト「$ tag preg_replace」を探しています$titlename。引用符から外すか、中括弧で囲みます"{$tag}"!

get_the_terms_list用語の HTML 形式のリストを返します。を使用したい場合get_the_terms、それは自動的に配列として返されるため、そのよう$tagsに定義する必要があります (これがループ内にあり、$post正確であると仮定すると:

$tags = get_the_terms($post->ID, 'post-tags');

<h2 class="entry-title">
        <a href="<?php the_permalink(); ?>" rel="bookmark" title="Permalink to <?php the_title(); ?>">
            <?php 
                $titlename = get_the_title();
                $tags = get_the_terms($post->ID, 'post_tag');
                foreach($tags as $tag) {
                    $titlename = str_replace($tag->name, '<span class="larger">'.$tag->name.'</span>', $titlename);
                }
                echo $titlename;
            ?>
        </a>
    </h2>

これは、あなた$displaytitleがそれぞれについて完全に書き直されていることを意味し、投稿のタイトルに$tag最後$tagが見つからない場合、何も変更されません。

于 2012-12-07T15:14:43.483 に答える
1

このようなことをするだけではありませんか?

$titlename = the_title();
$tags = get_the_terms($post->ID, 'post_tag');
foreach($tags as $tag) {
    $displaytitle = str_replace($tag->name, "<span class=\"larger\">$tag</span>", $titlename);
}

タグ全体を置き換えるため、正規表現を使用する必要はありません。そのjust_tags機能はもう必要ありません。

于 2012-12-07T15:20:18.707 に答える
0

あなたは本当にWordpressのフィルターを調べるべきです. the_title() に直接フィルターがあり、この機能を実行できます。

apply_filters('the_title','my_filter')

function my_filter($title)
{
//do what you want and
return $title; //when finished altering.
}

ありのままでいたいなら必要

get_the_title()
$titlename = get_the_title();//inside the loop
or
global $post;
$titlename = get_the_title($post->ID);//outside the loop

さらに crowjonah の回答、$tag の周りの引用符を削除しますが、おそらくそれを作成する必要がありますpreg_replace("/" . $tag->name . "/", '<span class="larger">'.$tag->name.'</span>', $titlename );

またはベンジャミン・パープのstr_replace

str_replace($tag->name, '<span class="larger">'.$tag->name.'</span>', $titlename  );
于 2012-12-07T15:17:49.677 に答える