在WooCommerce+Dokan设置中使用自定义用户界面保存产品属性值的方法

时间:2019-05-07 作者:John

我正在学习建立woocommerce+dokan网站。当店主登录我的平台时,他们可以输入他们想要销售的产品。我想让店主描述一下他们的产品,其中一个选项是它的状况,要么从未使用过,要么轻度使用过,要么大量使用过。

我正在添加一个新的产品属性“Condition”,如以下屏幕截图所示:

enter image description here

现在,当我以店主身份登录时,我看到了使用位于产品添加/编辑页面底部的此用户界面保存条件字段的选项:

enter image description here

我想用更直观的控件(如<select> 提供四种可能条件选项的菜单。

我对WordPress的最佳实践不太熟悉,无法做到这一点。所以我准备做以下工作:

创建一个子主题,这样我就可以用一些自定义HTML覆盖默认HTMLwp_term* 表并将术语加载到php中array() 我会用它来回应<select name="prod_condition">...</select> 子主题中的元素add_action( \'dokan_store_profile_saved\', \'save_condition_field\', 15 );. 此挂钩在产品保存后激发。在我的钩子里,我会读$_POST[\'prod_condition\'], 然后通过创建直接写入wp_terms_relationshipswp_postmeta 表格

我现在的做法似乎很残酷。

1 个回复
最合适的回答,由SO网友:John 整理而成

事实上,这最终是直截了当的。

Displaying the drop down

我用这行代码得到了我的pa_condition 分类法:

$attr_condition = get_terms(
array(
    \'taxonomy\' => \'pa_condition\', //empty string(\'\'), false, 0 don\'t work, and return empty array
    \'orderby\' => \'name\',
    \'order\' => \'ASC\',
    \'hide_empty\' => false, //can be 1, \'1\' too
));
我用它来获取当前产品的条件值(又名post)

$post_condition = get_the_terms($post_id,\'pa_condition\');
然后,使用for循环回显所有选项并为条件设置适当的select选项就很简单了。

Saving the drop down

我首先通过创建文件的子主题删除了自定义属性控件plugins\\dokan-pro\\templates\\products\\product-variations.php 然后清空所有html内容。

然后我确定我的名字select 菜单,并在约定中回显相应的html变量,该约定允许Wordpress保存值,而不需要像这样的任何新后端代码

   <select name="attribute_values[0][0]" class="dokan-form-control">
    <?php
        $val = count($post_condition) > 0 ? $post_condition[0]->slug : "";
        foreach($attr_condition as $item) {
            $selected = $val == $item->slug ? \' selected\' : \'\';
            echo \'<option value="\'.$item->slug.\'"\'.$selected.\'>\'.$item->name.\'</option>\';
        }
    ?>
    </select>
    <input type="hidden" name="attribute_names[0]" value="pa_condition" />
    <input type="hidden" name="attribute_position[0]" value="0" />
    <input type="hidden" name="attribute_is_taxonomy[0]" value="1" />
    <input type="hidden" name="attribute_visibility[0]" value="1" />
这些html变量将创建适当的$_POST 从“新建”下拉菜单中保存自定义属性值的架构。

相关推荐