使用未清理的名称值按名称获取术语

时间:2016-02-17 22:45:22

标签: wordpress wordpress-plugin themes

我想做的是以编程方式设置woocommerce产品类别。

我所拥有的是名称 test & sample 和帖子ID 9 ,因此要设置我使用的产品类别 get_term_by wp_set_object_terms

$name  = 'test & sample';
$posid = 9;
//get the term based on name
$term = get_term_by('name', $name, 'product_cat');
//set woocommerce product category
wp_set_object_terms($posid, $term->term_id, 'product_cat');

正如您所看到的,我的问题是 $name 的未标注值。 到目前为止,我所做的是将 & 替换为 &

$name = str_replace('&', '&', 'test & sample');
$posid = 9;
//get the term based on name
$term = get_term_by('name', $name, 'product_cat');
//if term does exist,then use set object terms
if(false != $term){
  //set woocommerce product category
  wp_set_object_terms($posid, $term->term_id, 'product_cat');
}
//if the term name doe not exist I will do nothing

我的问题是如何使用未经授权的名称值或名称来获取名称 如何清理名称值以正确获取术语ID。

3 个答案:

答案 0 :(得分:2)

您可以尝试使用$name清除$name = esc_html( $name );,然后再将其传递给get_term_by()。我相信wordpress会将特殊的HTML字符转换为相应的HTML实体,以便在呈现页面时正确显示字符。

示例:

$name = esc_html('test & sample'); // cleanses to 'test & sample'
$posid = 9;
$term = get_term_by('name', $name, 'product_cat');
wp_set_object_terms($posid, $term->term_id, 'product_cat');

答案 1 :(得分:2)

Wordpress通过sanitize_term_field清理术语名称(在一系列功能之后,它完成了真正的工作)。查看code,我们可以看到name通过了两个过滤器:'edit_term_name''edit_category_name'(第1880和1893行)。似乎wordpress不会将任何函数插入到那些过滤器中,因此唯一的转换发生在第1898行; $value = esc_attr($value);

那说你可以使用$name = esc_attr('test & sample');,这应该可以解决问题;)

答案 2 :(得分:1)

尝试以下方法:

public static void main(String[]args){

    final int [] HardCoded = {12, 35, 34, 2, 5};
    int UserInput [] = new int[5];

    Scanner input = new Scanner(System.in);

    System.out.println("Please enter 5 Numbers. ");

    System.out.print("Numbers [0]: ");
    UserInput [0] = input.nextInt();

    System.out.print("Numbers [1]: ");
    UserInput [1] = input.nextInt();

    System.out.print("Numbers [2]: ");
    UserInput [2] = input.nextInt();

    System.out.print("Numbers [3]: ");
    UserInput [3] = input.nextInt();

    System.out.print("Numbers [4]: ");
    UserInput [4] = input.nextInt();

    System.out.println("Lottery Numbers are: " + HardCoded);    

}

}