将自定义ID字段添加到类别

时间:2016-10-20 作者:Dmitriy Gamolin

我正在编写一个插件,用于将其他CMS中的产品和类别导入WoodPress(使用Woocommerce)。为了保持类别的结构并将产品放入正确的类别中,我希望使用来自源CMS的类别的自定义ID(不是Wordpress生成的ID),而不是类别名称作为参考。

默认类别参数如下所示:

$default = array(
    \'name\'             => \'\',
    \'slug\'             => \'\',
    \'parent\'           => 0,
    \'description\'      => \'\'
);
我需要添加一个引用字段来存储来自源CMS的ID,如下所示:

$args = array(
    \'name\'             => \'Name of the category\',
    \'slug\'             => \'name-of-the-category\',
    \'parent\'           => 0,
    \'description\'      => \'My category\',
    \'ref_id\'           => \'53113\'
);
我读过几篇关于向类别中添加自定义字段的文章,看起来最好的方法是使用术语meta,如下所示:

// After I\'ve created the category and saved its\' ID in $cat_id
// I add a termmeta for this category
add_term_meta($cat_id, \'ref_id\', \'53113\', true);
但现在的问题是,我如何用这个搜索类别ref_id? 我必须用key循环遍历所有术语meta吗ref_id 并搜索“53113”?

有没有更快的方法可以通过ref_id 第53113页?类似于:

// Fictional function that would be perfect,
// returns category ID assigned by Wordpress
$cat_id = get_cat_by_meta(\'ref_id\', \'53113\');
我需要使用ref_id 因为类别名称不是唯一的(在不同的父类别下可能有同名的类别),我认为这是从源CMS复制结构的最快方法。我需要这样做的另一个原因是,源CMS不知道Wordpress结构或可用类别及其ID。每次我都可以说将产品/类别放入ref_id 等于“53113”。

我希望我清楚地解释了问题和目标,如果没有,请留下评论,以便我可以改进问题。

Update: possible solution with an SQL Example

也许我可以使用这样的查询:

global $wpdb;
$results = $wpdb->get_results("SELECT term_id FROM wp_termmeta WHERE meta_key = \'ref_id\' AND meta_value = \'53113\' LIMIT 1");
我想这应该行得通,对我来说,这似乎是一个足够简单的解决方案(当然我也需要这样做$wpdb->prepare 查询中包含变量)。但我不确定这是否是Wordpress的最佳实践。

那么,我应该只使用这个自定义查询,还是有更好的方法?

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

您可以使用get_terms():

<?php
$args = array(
    \'taxonomy\' => \'name-of-the-category\',
    \'meta_query\' => array(
        array(
            \'key\'       => \'ref\',
            \'value\'     => \'53113\',
        ),
    ),
);
$terms = get_terms( $args );
您将得到一个术语数组,其中ref 价值将是53113.