Когда мой плагин обновляется, я пытаюсь записать новые значения в базу данных. Я перебираю типы сообщений, и если это Page Product или Post, я хочу разместить INDEX в БД. Иначе я хочу разместить NO-INDEX в БД. Часть INDEX зацикливается должным образом, или, по крайней мере, лучшее, что я могу сказать, поскольку значения хранятся в БД. Но когда он попадает в NO-INDEX, он обрабатывает первый тип записи, то есть ATTACHMENTS, а затем не получает и не обрабатывает остальные типы записей. Я пробовал несколько вариантов кода и не могу заставить его работать правильно. Что я здесь не так делаю?
Я использую add_option и register_setting
Вот код:
function set_activation_value(){
// Sets Field Defaults
$option = get_option('ews_index_option_name');
if (empty($option)) {
$args = array (
'public' => true
);
$post_types = get_post_types( $args, 'names' );
$my_options = get_option('ews_index_option_name');
$post_type_output = '';
foreach ( $post_types as $post_type ) {
if (($post_type == "page") || ($post_type == "product") || ($post_type == "post")) {
$my_options = get_option('ews_index_option_name');
$my_options["$post_type"] = 'index';
update_option('ews_index_option_name', $my_options);
}
else if (($post_type != "page") && ($post_type != "product") && ($post_type != "post")) {
$my_options = get_option('ews_index_option_name');
$my_options["$post_type"] = 'no-index';
update_option('ews_index_option_name', $my_options);
}
wp_reset_postdata();
$post_type_output .= $post_type;
}
update_option('ews_index_my_types', $post_types);
update_option('ews_index_option_var', $post_type_output);
}
}
register_activation_hook( __FILE__, 'set_activation_value' );
Когда я запускаю обновление, я получаю следующие результаты:
posts = ' index ' pages = ' index ' attachments = ' без индекса ' wpm-testimonials = '' rl-galleries = ''
Я ожидаю получить:
posts = ' index ' pages = ' index ' attachments = ' без индекса 'wpm-testimonials =' без индекса 'rl-galleries =' без индекса '
База данных также показывает те же данные как то, что представляют эти картины. Я также добавил другие типы сообщений для проверки, а в остальных случаях, если они никогда не пройдут через вложения.
Я также безуспешно пробовал следующий код:
foreach ( $post_types as $post_type ) {
if (($post_type == "page") || ($post_type == "product") || ($post_type == "post")) {
$my_options = get_option('ews_index_option_name');
$my_options["$post_type"] = 'index';
update_option('ews_index_option_name', $my_options);
} else {
$my_options = get_option('ews_index_option_name');
$my_options["$post_type"] = 'no-index';
update_option('ews_index_option_name', $my_options);
}
}
Любой помощь будет принята с благодарностью, был в этом некоторое время. Я не очень хорош с циклами и массивами, которые могут быть здесь очевидны. Спасибо!