0

単純な質問のように見えるものに対する答えを探しましたが、役に立ちませんでした。

私はいくつかの HTML 出力を持っています。

<div id="attachment_1098" class="wp-caption alignleft" style="width: 160px">[[ a href="mydomain.com/wp-content/uploads/2010/11/photo-1.jpg" ]][[img class="size-thumbnail wp-image-1098" title="John Doe" src="mydomain.com/wp-content/uploads/2010/11/photo-1.jpg" alt="John Doe" width="150" height="200" /]][[ /a ]]<p class="wp-caption-text">John Doe</p></div>
<div id="attachment_1080" class="wp-caption alignleft" style="width: 160px">[[ a href="mydomain.com/wp-content/uploads/2010/11/photo-2.jpg" ]][[img class="size-thumbnail wp-image-1080" title="Fred Bloggs" src="mydomain.com/wp-content/uploads/2010/11/photo-1.jpg" alt="Fred Bloggs" width="150" height="200" /]][[ /a ]]<p class="wp-caption-text">Fred Bloggs</p></div>
<div id="attachment_1099" class="wp-caption alignleft" style="width: 160px">[[ a href="mydomain.com/wp-content/uploads/2010/11/photo-3.jpg" ]][[img class="size-thumbnail wp-image-1099" title="Jane Doe" src="mydomain.com/wp-content/uploads/2010/11/photo-3.jpg" alt="Jane Doe" width="150" height="200" /]][[ /a ]]<p class="wp-caption-text">Jane Doe</p></div>
<div id="attachment_1096" class="wp-caption alignleft" style="width: 160px">[[ a href="mydomain.com/wp-content/uploads/2010/11/photo-4.jpg" ]][[img class="size-thumbnail wp-image-1096" title="Joe Public" src="mydomain.com/wp-content/uploads/2010/11/photo-4.jpg" alt="Joe Public" width="150" height="200" /]][[ /a ]]<p class="wp-caption-text">Joe Public</p></div>

(上記の html は実際には整形式であり、アンカーと画像の < & > をそれぞれ [[ と ]] に置き換えて、投稿する必要がありました。)

各 (p) のテキスト コンテンツを「wp-caption-text」のクラスでリンクをラップしたいと思います。その URL は次の形式にする必要があります。

'/my-page-root/'.strtolower(str_replace(' ','-',$linkText)).'';

(つまり、John Doe は/my-page-root/john-doeなどにリンクします)

さて、preg_replace でここまでできましたが、後方参照からリンク URL を作成する方法がわかりません。これは、それを行うためのより簡単な方法があるに違いないと私に思わせます(そしておそらくより速い方法?)

とにかく、ここに私が得たコードがあります:

<?php $contentLinked = preg_replace("/(<p class=\"wp-caption-text\">.*<\/p>)/Us", "<p class=\"wp-caption-text\"><a href=\"\">$1</a></p>",$content); ?>

これにより、テキストが空のアンカーに置き換えられます。後方参照を使用してリンク URL を作成する方法に行き詰まっています。

いくつかのメモ:

リンクはテキストのみを折り返す必要があります (後でテキストの一部のみを折り返す必要があるかもしれませんが、その橋を渡ったときに橋を渡ります)

Wordpress では、リンクの削除を防ぐための回避策なしに wysiwyg を介してこれを許可しません。ある日、他の誰かが入ってきてフォーマットを破壊する可能性があるため (したがってハード コーディング)、これに対する有用な wp の回避策はありません。

画像のリンクはフル サイズの画像 (jquery ギャラリーが進行中) にとどまる必要があるため、画像全体や div をリンクにラップすることはできません。

あなたが私に与えることができるどんな助けにも乾杯.

アンディ

4

2 に答える 2

0

後方参照に保存するには、一致させたい部分(テキスト)を括弧で囲む必要があると思います。このような:

<?php $contentLinked = preg_replace("/(<p class=\"wp-caption-text\">(.*)<\/p>)/Us", "<p class=\"wp-caption-text\"><a href=\"\">$1</a></p>",$content); ?>
于 2010-11-25T12:29:13.757 に答える
0

やりました!

元の欠陥を見つけてくれたJordiに感謝します.

関数内の preg_replace 内でこの呼び出し関数を見つけました

代わりに preg_replace_callback() を使用するようになりました(以前は使用したことがなく、原因はありませんでした)

他の誰かが同様の問題を抱えている場合、結果のコードは次のようになります。

<?php $contentLinked = preg_replace_callback("/<p class=\"wp-caption-text\">(.*)<\/p>/Us", 'myCallback',$content);?>

そして機能:

<?php 
function myCallback($match){

        return '<a href="'.strtolower(str_replace(' ','-',$match[1])).'">'.$match[1].'</a>';

    }
?>
于 2010-11-25T13:25:56.320 に答える