Foreach L oop типов постов с вложенным, если еще, если не завершающим процесс - PullRequest
0 голосов
/ 25 марта 2020

Когда мой плагин обновляется, я пытаюсь записать новые значения в базу данных. Я перебираю типы сообщений, и если это 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);
    }
}

Любой помощь будет принята с благодарностью, был в этом некоторое время. Я не очень хорош с циклами и массивами, которые могут быть здесь очевидны. Спасибо!

1 Ответ

0 голосов
/ 26 марта 2020

Код ниже должен давать тот же результат, что и ваш, но он немного короче. Меньше кода - меньше ошибок.

function set_activation_value(){
    // Sets Field Defaults
    $my_options = get_option('ews_index_option_name');
    if ( empty( $my_options ) ) {
        $args = array ( 'public' => true ); 
        $post_types = get_post_types( $args, 'names' ); 
        $post_type_output = implode('', $post_types);

        foreach ( $post_types as $post_type ) {
            $my_options[ $post_type ] = ( in_array( $post_type, ["page", "product", "post"] ) ) ? 'index' : 'no-index';
        }
        update_option('ews_index_option_name', $my_options);
        update_option('ews_index_my_types', $post_types);
        update_option('ews_index_option_var', $post_type_output);
    }
}
register_activation_hook( __FILE__, 'set_activation_value' );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...