我正在使用Ajax search pro插件与WooCommerce进行高级产品搜索。
在Ajax search pro插件设置中,有一个“高级选项”标签,您可以在其中自定义帖子标题和帖子说明。
例如,如果您搜索 Aven...
,则结果会显示 Avengers
...
在高级标签中,您可以自定义结果显示某些自定义字段,并获得以下内容: Avengers 10$
将 'post_title'
与 {结合使用{1}} ”。
我的问题是我无法将自定义字段与自定义分类相结合。例如,将'post_title'自定义字段与 '_price
自定义分类法相结合是不可能的,可以使用此类组合 Avengers 2012
我想在自定义字段和
之间使用一些特殊组合自定义分类术语 release_year
,如in this answer。
自定义分类类型(自定义类别类型) release_year
(类似于 tvshow_cat
是)。
我想从 'product_cat'
分类标准中显示前3个相关产品术语(逗号分隔)的字符串。
我怎样才能做到这一点?
由于
答案 0 :(得分:3)
您可以构建一个功能,该功能将在产品元数据自定义字段中复制相关的格式化分类术语。这是注释代码:
1)子功能(由2个主要功能使用):
die();
这是一个只能使用一次的功能(之前进行数据库备份)。此功能将为所有现有产品创建 2个特殊自定义字段。
// Processing 'release_year' formatting in a string
function process_release_year( $post_id ){
$release_years_str = get_the_term_list( $post_id, 'release-year', '', ',' );
$release_years_arr = explode(',', $release_years_str);
$count = sizeof( $release_years_arr );
$first_year = $release_years_arr[ 0 ];
if ( $count > 1 ) {
$last_year = $release_years_arr[ $count - 1 ];
$releaseyear_as_text = ' (' . $first_year . ' - ' . $last_year . ')';
}
elseif ($count == 1) $releaseyear_as_text = ' ' . $first_year;
else $releaseyear_as_text = '';
return $releaseyear_as_text;
}
// Processing 'tvshow_cat' formatting in a string (3 coma separated terms in a string)
function process_tvshow_cat( $post_id ){
$description_terms = get_the_terms( $post_id, 'tvshow_cat' );
$count = 0; $description_string = '';
foreach ( $description_terms as $description_term ) {
$count++;
if( $count < 4 ){
$description_string .= $description_term;
if( $count < 3 ) $description_string .= ', ';
}
}
return $description_string;
}
// The two custom fields creation mechanism
function custom_fields_creation( $post_id ){
// The release year
$test_cf1 = get_post_meta($post_id, 'release_year', true );
if( empty($test_cf1) ) {
// if doesn't exist we create it
$release_year = process_release_year($post_id);
if( !empty( $release_year ) )
update_post_meta($post_id, 'release_year', $release_year );
}
// The TV show cat
$test_cf2 = get_post_meta($post_id, 'mov_description', true );
if( empty($test_cf2) ) {
// if doesn't exist we create it
$description_mov = process_release_year($post_id);
if( !empty($description_mov) )
update_post_meta($post_id, 'mov_description', $description_mov );
}
}
以下功能会在每次发布新产品时创建自定义字段 :
// 1. FOR ALL EXISTING PRODUCTS ==> ==> ==> USE IT ONE TIME ONLY!
add_action( 'woocommerce_init', 'product_custom_fields_bulk_action' ); // To stop it, just comment this line
function product_custom_fields_bulk_action(){
// Get all published products
$products = get_posts( array(
'post_type' => 'product',
'post_status' => 'publish',
'numberposts' => -1
) );
// Iterating each product
foreach( $products as $product )
custom_fields_creation( $product->id );
}
此代码位于您的活动子主题或主题中的function.php文件中...
您可以克隆任意数量的自定义字段...
此代码经过测试且有效。