-
作者帖子
-
默认情况下,WooCommerce 将从属性值中剥离所有 HTML,这意味着您不能使用 HTML 锚来使产品属性可链接。尽管使用一些自定义代码,我们仍然可以做到。
幸运的是,WordPress 现在可以帮助我们在 WordPress 4.4 中引入术语元组。
/** * Register term fields */ add_action( 'init', 'register_attributes_url_meta' ); function register_attributes_url_meta() { $attributes = wc_get_attribute_taxonomies(); foreach ( $attributes as $tax ) { $name = wc_attribute_taxonomy_name( $tax->attribute_name ); add_action( $name . '_add_form_fields', 'add_attribute_url_meta_field' ); add_action( $name . '_edit_form_fields', 'edit_attribute_url_meta_field', 10 ); add_action( 'edit_' . $name, 'save_attribute_url' ); add_action( 'create_' . $name, 'save_attribute_url' ); } } /** * Add term fields form */ function add_attribute_url_meta_field() { wp_nonce_field( basename( __FILE__ ), 'attrbute_url_meta_nonce' ); ?> <div class="form-field"> <label for="attribute_url"><?php _e( 'URL', 'domain' ); ?></label> <input type="url" name="attribute_url" id="attribute_url" value="" /> </div> <?php } /** * Edit term fields form */ function edit_attribute_url_meta_field( $term ) { $url = get_term_meta( $term->term_id, 'attribute_url', true ); wp_nonce_field( basename( __FILE__ ), 'attrbute_url_meta_nonce' ); ?> <tr class="form-field"> <th scope="row" valign="top"><label for="attribute_url"><?php _e( 'URL', 'domain' ); ?></label></th> <td> <input type="url" name="attribute_url" id="attribute_url" value="<?php echo esc_url( $url ); ?>" /> </td> </tr> <?php } /** * Save term fields */ function save_attribute_url( $term_id ) { if ( ! isset( $_POST['attribute_url'] ) || ! wp_verify_nonce( $_POST['attrbute_url_meta_nonce'], basename( __FILE__ ) ) ) { return; } $old_url = get_term_meta( $term_id, 'attribute_url', true ); $new_url = esc_url( $_POST['attribute_url'] ); if ( ! empty( $old_url ) && $new_url === '' ) { delete_term_meta( $term_id, 'attribute_url' ); } else if ( $old_url !== $new_url ) { update_term_meta( $term_id, 'attribute_url', $new_url, $old_url ); } } /** * Show term URL */ add_filter( 'woocommerce_attribute', 'make_product_atts_linkable', 10, 3 ); function make_product_atts_linkable( $text, $attribute, $values ) { $new_values = array(); foreach ( $values as $value ) { if ( $attribute['is_taxonomy'] ) { $term = get_term_by( 'name', $value, $attribute['name'] ); $url = get_term_meta( $term->term_id, 'attribute_url', true ); if ( ! empty( $url ) ) { $val = '<a href="' . esc_url( $url ) . '" title="' . esc_attr( $value ) . '">' . $value . '</a>'; array_push( $new_values, $val ); } else { array_push( $new_values, $value ); } } else { $matched = preg_match_all( "/\[([^\]]+)\]\(([^)]+)\)/", $value, $matches ); if ( $matched && count( $matches ) == 3 ) { $val = '<a href="' . esc_url( $matches[2][0] ) . '" title="' . esc_attr( $matches[1][0] ) . '">' . sanitize_text_field( $matches[1][0] ) . '</a>'; array_push( $new_values, $val ); } else { array_push( $new_values, $value ); } } } $text = implode( ', ', $new_values ); return $text; }
将网址添加到您的产品属性
在 WooCommerce 中,我们有两种类型的产品属性:全球产品属性
本地产品属性
有什么不同?全球产品属性是从产品> 属性创建的,它们是分类法,如产品类别或帖子标签。任何产品都可以使用在此定义的属性,这就是为什么它们是全球性的。
相反,本地产品属性是在产品中定义的,而在创建/编辑它的属性标签中定义。它们仅在已定义的产品上可用,并且不能被其他产品使用。
由于这种差异,我们需要使用两种不同的方式将 URL 添加到产品属性字词中。
在 wp-content / themes / your-child-theme-name /中打开你的 functions.php 文件,并在文件末尾添加下面的代码:
这段代码做了什么?
从第 1 行到第 67 行,代码在表单中添加一个名为 URL 的字段,用于创建和编辑全局属性。功能是注册该字段,将其添加到添加新术语表单中,将其添加到编辑术语表单中并保存该字段。
从第 69 行到文件末尾,它会调整单个产品页面中附加信息选项卡中的值,以处理产品属性项的 URL 。这个函数也处理本地属性的 URL 。
如何使用产品属性 URL
对于全局属性,请转至产品> 属性并添加一个新属性,或编辑现有属性。它会出现在右边的表格中。点击齿轮图标添加产品属性条款,你会看到这样的形式:如何使用产品属性 URL
对于全局属性,请转至产品> 属性并添加一个新属性,或编辑现有属性。它会出现在右边的表格中。点击齿轮图标添加产品属性条款,你会看到这样的形式:正如您所看到的,表单添加新设计器 (设计器是我用于此示例的属性的名称) 表单的底部有一个新的字段,名为 URL 。在那里写下你想要的产品属性条款链接到的 URL 。
编辑产品属性字词时可以使用相同的字段:
对于本地属性,我们没有这样的接口,所以我们必须找到一种解决方法来将 URL 添加到产品属性条款中。
你知道我喜欢 Markdown 吗?这就是我们要使用的本地属性 Markdown!
从产品> 所有产品编辑产品,然后打开 「 属性」 选项卡。从这里添加一个新的自定义产品属性。然后给它一个名字并使用 Markdown 添加一些值来创建链接:
[Text shown](https://myurl.com)
这是使用的格式。在此屏幕截图中显示了一个示例:
这里的第一个属性 Logo 是本地属性,第二个属性 Designer 是全局属性。
现在点击保存属性并发布您的产品。这是它将如何使用主题店面在网站上显示:
感谢 James 在这篇文章中成为我的榜样。我不能用我的名字,因为称我为设计师是一种耻辱。
-
作者帖子
- 哎呀,回复话题必需登录。