Я знаю, что некоторым это может показаться странным, но я хотел бы продублировать пост о создании.
Когда создается сообщение, я хотел бы продублировать его, добавив новые данные в заголовок, а также обновив мета-поля и изменив таксономию, в которой он находится.
Вот что я сделал до сих пор:
add_action('wp_insert_post', 'my_add_custom_fields');
function my_add_custom_fields($post_id)
{
if ( $_POST['post_type'] == 'products' ) {
$my_post = array(
'post_title' => get_the_title(),
'post_content' => '',
'post_status' => 'publish',
'post_type' => 'products',
);
$id = wp_insert_post($my_post);
update_post_meta($id,'keywords', get_the_title());
wp_set_object_terms($id, 'New Term Here', 'platform');
}
return true;
}
Проблема, которую я имею, состоит в том, что это создает бесконечный цикл, создавая новый пост тысячи раз и не остановится, пока я не перезапущу apache.
Это можно обойти?
Вам нужно какое-то управление для этого, чтобы остановить его зацикливание. например установить глобальное значение для подсчета
$GLOBALS['control']=0;
add_action('wp_insert_post', 'my_add_custom_fields');
function my_add_custom_fields($post_id)
{
if ( $_POST['post_type'] == 'products' ) {
//if control is on third iteration dont proceed
if($GLOBALS['control']===2)
return;
//add control here!
$GLOBALS['control']++;
$my_post = array(
'post_title' => get_the_title(),
'post_content' => '',
'post_status' => 'publish',
'post_type' => 'products',
);
$id = wp_insert_post($my_post);
update_post_meta($id,'keywords', get_the_title());
wp_set_object_terms($id, 'New Term Here', 'platform');
}
return true;
}
Других решений пока нет …