我的php非常有限。我编辑现有的东西以使其工作,通常可以或多或少地理解代码在做什么,但我自己无法编写代码。
我会尽力解释我的情况。
我有一个Woocommerce插件,它将产品显示为列表(在表中),而不是单独的框。此表有一个单元格,用于表示产品的“名称”。我希望在每行的每个名称下的第二行显示分类法的内容。
假设现在是(3列/行):
第1行:名称1 |评级|添加到购物车按钮第2行:名称2 |评级|添加到购物车按钮
我希望它是:
行1:名称1 |评级|添加到购物车按钮分类国家/地区||
第2行:名称2 |评级|添加到购物车按钮分类国家/地区||
几年前,我在一个自定义字段中使用了这行代码(在另一个插件中,省是自定义字段):。get\\u post\\u meta(get\\u the\\u ID(),“Province”,true)。
现在,有了一个新插件,它可以做同样的事情,但要好得多,我也想做同样的事情,但这次是用分类法,而不是自定义字段。(这允许我根据分类法设置过滤器,而我无法使用自定义字段)
我找到了php文件,并在“名称单元格”中搜索和显示内容的位置。用一个简单的“test”字符串进行了测试,结果显示了“test”,正如我所希望的那样,它是每个名称单元格的第二行。然后,我更改了新插件的代码并添加了我的旧代码(get\\u post\\u meta(get\\u the\\u ID(),\'Province\',true)。部分)而不是测试字符串,并且再次运行良好。。将每行自定义字段的内容显示为名称单元格中的第二行。。。
现在,我使用一个插件添加了一个自定义分类法,称之为“country”,并编辑了我的所有产品,以在新的分类法中获得正确的数据。
剩下的就是更改该行,以便它读取分类法而不是自定义字段。这就是我被困的地方。。。
这是自定义字段的完整代码(工作正常)。
private function get_product_name( $product ) {
$name = wcpt_get_name( $product ) . \'</br><i>\' . get_post_meta( get_the_ID(), \'Province\', true ) . \'</i></td>\';
if ( array_intersect( array( \'all\', \'name\' ), $this->args->links ) ) {
$name = WCPT_Util::format_product_link( $product, $name );
}
return apply_filters( \'wc_product_table_data_name\', $name, $product );
}
如何从其中的分类法中获取值,而不是从自定义字段中获取值?
非常感谢。
SO网友:dawoodman71
简单的回答是使用以下方法获取分类术语:
wp_get_post_terms( $post->ID, \'yourTaxonomyName\' );
这将返回WP Term对象的数组。以下是如何获得第一个学期名称:
$terms = wp_get_post_terms( $post->ID, \'yourTaxonomyName\' );
$first_term_name = $terms[0]->name;
您可以在WordPress Codex中了解有关此方法的更多信息:
https://codex.wordpress.org/Function_Reference/wp_get_post_terms希望这有帮助:)
更新日期:
private function get_product_name( $product ) {
// Get all the country terms associated with $product.
$terms = wp_get_post_terms($product->ID, \'country\');
// Set the empty $country string.
$country = \'\';
// Check if there are country terms available.
if($terms){
// If there are terms then use the first one to populate the $country variable.
$country = \'</br><i>\' . $terms[0]->name . \'</i>\';
}
// Add $country to the $name variable.
$name = wcpt_get_name( $product ) . $country . \'</td>\';
// This part could rewrite $name which would remove $country.
if ( array_intersect( [ \'all\', \'name\' ], $this->args->links ) ) {
$name = WCPT_Util::format_product_link( $product, $name );
}
return apply_filters( \'wc_product_table_data_name\', $name, $product );
}