【问题标题】:German Special character not working in WordPress Schema德语特殊字符在 WordPress 架构中不起作用
【发布时间】:2022-01-06 13:29:32
【问题描述】:

我正在使用以下过滤器向我的产品添加更多 Schema 相关信息。 但是对于一些德语字符,它被转换为数字代码

add_filter( 'woocommerce_structured_data_product', 'filter__woocommerce_structured_data_product', 20, 2 );
function filter__woocommerce_structured_data_product( $schema, $product ) {

global $post;

$shipping_val = utf8_decode( get_post_meta( $post->ID, 'pro_shipping', true ) ); 
// Not working : CHF 10.–
$colour_val = utf8_decode( get_post_meta( $post->ID, 'pro_color', true ) );
// Not working : Aussen: rosa und blau (metallisch), Bordüre: grün, Innen: lila

$schema['shipping'] = array(
    '@type'  => 'Shipping',
    'name'   => $shipping_val ,
);

  $schema['colour'] = array(
    '@type'  => 'Colour',
    'name'   => $colour_val ,
  );

  return $schema;

}

我添加了注释,实际数据以这种形式存储在自定义字段中。 我添加了屏幕截图,它以数字形式转换实际数据

我该如何解决这个问题?

【问题讨论】:

    标签: wordpress woocommerce seo schema


    【解决方案1】:

    不确定为什么要对这些值运行 utf8_decode 函数,但可以使用 iconv 函数将它们转换回 utf8

    因此,当您运行 utf8_decode 时,它会将您的值转换为 ISO-8859-1 字符。

    utf8_decode:将带有 ISO-8859-1 字符的字符串以 UTF-8 编码转换为单字节 ISO-8859-1

    我们可以在iconv 函数中使用ISO-8859-1

    iconvDocs

    例如,如果您运行以下代码:

    $german_word = "Bordüre: grün";
    
    $utf8__decode_german_word = utf8_decode($german_word);
    
    $utf8_german_word_main = iconv("ISO-8859-1", "utf-8//TRANSLIT//IGNORE", $utf8__decode_german_word);
    
    echo $german_word . "<br>";
    
    echo $utf8__decode_german_word . "<br>";
    
    echo $utf8_german_word_main . "<br>";
    

    哪个会输出这个:

    // $german_word result
    Bordüre: grün
    
    // $utf8__decode_german_word result
    Bord�re: gr�n
    
    // $utf8_german_word_main result
    Bordüre: grün
    


    所以你的整个代码应该是这样的:

    add_filter("woocommerce_structured_data_product", "filter__woocommerce_structured_data_product", 20, 2);
    
    function filter__woocommerce_structured_data_product($schema, $product)
    {
    
        global $post;
    
        $shipping_val = utf8_decode(get_post_meta($post->ID, "pro_shipping", true));
        $colour_val = utf8_decode(get_post_meta($post->ID, "pro_color", true));
    
    
        $schema["shipping"] = array(
            "@type"  => "Shipping",
            "name"   => iconv("ISO-8859-1", "utf-8//TRANSLIT//IGNORE", $shipping_val),
        );
    
        $schema["colour"] = array(
            "@type"  => "Colour",
            "name"   => iconv("ISO-8859-1", "utf-8//TRANSLIT//IGNORE", $colour_val),
        );
    
        return $schema;
    }
    

    如果你能让它工作,请告诉我。

    【讨论】:

    • 不错的解决方案...
    • 我尝试了您的解决方案,但无法正常工作。我使用了这个功能 utf8_decode ,这就是为什么在前端它显示像 ä 这样的确切字符。 ü 和 ö 但是当我 CTRL + U 来检查架构时,它会将这个字符转换为一些数字代码。
    • 现在,我已经替换了这样的字符:ä = ae,ü = ue,ö = oe
    猜你喜欢
    • 2014-03-14
    • 1970-01-01
    • 2014-03-25
    • 1970-01-01
    • 1970-01-01
    • 2013-03-16
    • 2013-07-30
    • 2012-04-16
    • 2018-12-15
    相关资源
    最近更新 更多