如何在WordPress中修改<li>元素的title属性文本?
问题描述
- 我有一个带有
title属性的<li>元素,鼠标悬停时会显示该属性内容,当前其title属性值为"Details"(代码格式为<li title="Details">),需要修改这个title属性的文本。
已尝试的方法
- 在
functions.php中添加了一个使用gettext的函数,该函数通常对其他元素有效,但用于此处时未能成功。
add_filter('gettext',function($strings) { $text = array( 'Details' => 'Pregledaj', 'Ship to' => 'Dostavite na', ); $strings = str_ireplace( array_keys( $text ), $text, $strings ); return $strings; }, 20 );
解决方案
原因分析
gettext过滤器仅对通过__()、_e()等WordPress翻译函数输出的文本生效。如果这个<li>的title是硬编码在模板里,或是通过非翻译函数的方式输出,gettext就无法捕获到这段文本。
方法1:直接修改模板文件
找到输出该<li>元素的模板文件(比如产品列表模板、自定义页面模板),直接将title="Details"替换为title="Pregledaj"。注意:如果是主题模板,建议使用子主题修改,避免主题更新时覆盖修改内容。
方法2:通过钩子过滤HTML内容替换
如果找不到模板位置,或者不想修改模板,可以用钩子过滤输出的HTML内容,精准替换目标属性:
add_filter('the_content', 'custom_replace_li_title'); function custom_replace_li_title($content) { // 精准匹配带有title="Details"的<li>元素 $content = preg_replace('/<li([^>]*?)title="Details"([^>]*?)>/', '<li$1title="Pregledaj"$2>', $content); return $content; }
如果这个<li>出现在特定场景(比如WooCommerce产品列表),可以使用更针对性的钩子(如woocommerce_loop_product_link_start),避免全局替换影响其他元素。
方法3:修复翻译函数调用(如果适用)
如果这段文本应该支持翻译,但原代码未使用翻译函数,找到输出<li>的代码位置,修改为带翻译函数的写法:
<li title="<?php _e('Details', 'your-theme-text-domain'); ?>">
替换your-theme-text-domain为当前主题或插件的文本域,之后你的gettext过滤器就能正常生效了。
内容的提问来源于stack exchange,提问作者smack857
相关产品推荐
相关产品推荐

