PHP を使用すると、次のように実行できるはずです。
function wrap_anchor_text_with_span( $content ) {
if ( ! is_admin() && preg_match( '~<a(.*?)>(.*?)</a>~', $content ) ) {
$content = preg_replace_callback( '~<a(.*?)>(.*?)</a>~', '_add_span', $content );
}
return $content;
}
add_filter('the_content', 'wrap_anchor_text_with_span', 10);
function _add_span( $matches ) {
if ( ! ( $title = strip_tags( $matches[2] ) ) ) { // If we only have an image inside the anchor
return '<a' . $matches[1] . '>' . $matches[2] . '</a>';
} else {
return '<a' . $matches[1] . '><span data-title="' . esc_attr( $title ) . '">' . $matches[2] . '</span></a>';
}
}
この関数が行うことは、the_content
フィルタリングにフックし、すべてのアンカー タグ内にスパンを配置することです。
アンカーに画像が含まれている場合、スパンは追加されないことに注意_add_span
してください。必要に応じて、関数を次のように変更することで、この動作を変更できます。
function _add_span( $matches ) {
return '<a' . $matches[1] . '><span data-title="' . esc_attr( strip_tags( $matches[2] ) ) . '">' . $matches[2] . '</span></a>';
}
jQueryでの解決もさほど難しくありませんが、PHPだけで十分だと思います。