Не знаю, является ли это «правильным» способом сделать это ... Но мне нужна была функция добавления полей ретранслятора ACF с указанием значения даты в качестве атрибута в post save, так что это была функция, которую я придумал с:
add_action( 'save_post', 'ed_save_post_function', 10, 3 );
function ed_save_post_function( $post_ID, $post, $update ) {
//print_r($post);
if($post->post_type == 'product')
{
$dates = get_field('course_dates', $post->ID);
//print_r($dates);
if($dates)
{
$date_arr = array();
$val = '';
$i = 0;
foreach($dates as $d)
{
if($i > 0)
{
$val .= ' | '.date('d-m-Y', strtotime($d['date']));
}
else{
$val .= date('d-m-Y', strtotime($d['date']));
}
$i++;
}
$entry = array(
'course-dates' => array(
'name' => 'Course Dates',
'value' => $val,
'position' => '0',
'is_visible' => 1,
'is_variation' => 1,
'is_taxonomy' => 0
)
);
update_post_meta($post->ID, '_product_attributes', $entry);
}
}
}
Надеюсь, это поможет кому-то.
Вы можете использовать Object.keys()
для перебора ключей объекта, а затем использовать Array.filter()
для фильтрации ключей, здесь я проверяю, есть ли у внутренних объектов свойство [ 114] и если это свойство истинно:
const mainObj = {
obj1: { show: true, a: 1 },
obj2: { show: false, a: 2 },
obj3: { a: 3 },
obj4: { show: true, b: 1 }
};
const result = Object.keys(mainObj).filter(key => mainObj[key].show);
console.log(result);
Если вы хотите использовать for-in
[119 ] необходимо убедиться, что свойство является частью объекта и не унаследовано от его цепочки прототипов, используя Object.hasOwnProperty()
:
const mainObj = {
obj1: { show: true, a: 1 },
obj2: { show: false, a: 2 },
obj3: { a: 3 },
obj4: { show: true, b: 1 }
};
const result = [];
for (const prop in mainObj) {
if (mainObj.hasOwnProperty(prop) && mainObj[prop].show) {
result.push(prop);
}
}
console.log(result);
[ 1120]