Обновляемый мета-описание для WP

Вопросы и ответы

Недавно я создал плагин, и он работал до сегодняшнего дня:

Описание метаданных, похоже, не обновляется. Вот фрагмент кода:

// Обработка загрузки файла и его дальнейшая обработка

add_action( 'admin_init', 'md_updater_handle_file_upload' );

function md_updater_handle_file_upload() {
  if (
    isset( $_POST['md_updater_nonce_field'] ) && 
    wp_verify_nonce( $_POST['md_updater_nonce_field'], 'md_updater_nonce' ) && 
    isset( $_FILES['md_csv_file'] ) && 
    current_user_can( 'manage_options' )
) {
    $csv_file = $_FILES['md_csv_file'];

    // Проверка ошибок загрузки
    if ( $csv_file['error'] !== UPLOAD_ERR_OK ) {
        add_action( 'admin_notices', 'md_updater_upload_error_notice' );
        return;
    }

    // Проверка типа файла
    $file_type = wp_check_filetype( $csv_file['name'] );
    if ( $file_type['ext'] !== 'csv' ) {
        add_action( 'admin_notices', 'md_updater_invalid_file_notice' );
        return;
    }

    // Обработка CSV файла
    $file_tmp_path = $csv_file['tmp_name'];
    $csv_data      = array_map( 'str_getcsv', file( $file_tmp_path ) );

    // Удаление строки заголовка, если она присутствует
    $header = $csv_data[0];
    if ( $header[0] === 'Type' ) {
        array_shift( $csv_data );
    }

    foreach ( $csv_data as $row ) {
        // Предполагаемые столбцы: Тип, ID, Заголовок/Имя, URL, Мета описание
        $type             = sanitize_text_field( $row[0] );
        $id               = intval( $row[1] );
        // $title_or_name    = sanitize_text_field( $row[2] ); // Не используется в импорте
        // $url              = esc_url_raw( $row[3] );         // Не используется в импорте
        $meta_description = sanitize_text_field( $row[4] );

        if ( ( $meta_description ) ) {
            if ( in_array( $type, array( 'post', 'page' ), true ) && $id > 0 ) {
                // Обновление метаданных поста
                update_post_meta( $id, '_yoast_wpseo_metadesc', $meta_description );
            } elseif ( taxonomy_exists( $type ) && $id > 0 ) {
                // Обновление метаданных термина
                update_term_meta( $id, '_yoast_wpseo_metadesc', $meta_description );
            }
        }
    }

    add_action( 'admin_notices', 'md_updater_success_notice' );
  }
}

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

Ответ

Ваш код выглядит вполне разумно, но я вижу несколько потенциальных проблем и возможностей для улучшения, которые могут повлиять на обновление метаописаний. Давайте пройдемся по основным моментам:

  1. Ошибки в синтаксисе: У Вас отсутствует точка с запятой после вызова функции add_action('admin_init', 'md_updater_handle_file_upload'). Она должна выглядеть так:

    add_action( 'admin_init', 'md_updater_handle_file_upload' );
  2. Проблемы с оператором: Вы используете && и >, что указывает на HTML-сущности. Вам нужно использовать стандартные операторы && для логического "И" и > для "больше". Исправьте это, чтобы код выглядел следующим образом:

    if (
       isset( $_POST['md_updater_nonce_field'] ) &&
       wp_verify_nonce( $_POST['md_updater_nonce_field'], 'md_updater_nonce' ) &&
       isset( $_FILES['md_csv_file'] ) &&
       current_user_can( 'manage_options' )
    ) {
       ...
       if ( in_array( $type, array( 'post', 'page' ), true ) && $id > 0 ) {
           ...
       } elseif ( taxonomy_exists( $type ) && $id > 0 ) {
           ...
       }
    }
  3. Проверка корректности данных: Убедитесь, что ID действительно соответствует существующим записям или терминам. Для этого вы можете использовать функцию get_post() для постов и get_term() для терминов перед обновлением мета данных. Вот пример, как это можно сделать:

    if ( in_array( $type, array( 'post', 'page' ), true ) && $id > 0 ) {
       if ( get_post( $id ) ) { // Проверка существования поста
           update_post_meta( $id, '_yoast_wpseo_metadesc', $meta_description );
       }
    } elseif ( taxonomy_exists( $type ) && $id > 0 ) {
       if ( get_term( $id, $type ) ) { // Проверка существования термина
           update_term_meta( $id, '_yoast_wpseo_metadesc', $meta_description );
       }
    }
  4. Сообщения об успехе/ошибках: Убедитесь, что функции md_updater_upload_error_notice, md_updater_invalid_file_notice и md_updater_success_notice определены и отображают соответствующие сообщения пользователю.

  5. Разрешения на файлы: Проверьте, что пользователь, выполняющий загрузку, имеет права для работы с метаданными. Вы можете добавить дополнительные проверки в случае ошибок.

  6. Логи: Если у вас есть доступ к логам сервера, это может помочь выявить возможные ошибки или проблемы, связанные с правами на запись данных.

Попробуйте внести вышеуказанные изменения и сделать отладку, чтобы увидеть, устраняются ли проблемы с обновлением метаописаний. Если у вас возникнут другие вопросы или потребуются дополнения, не стесняйтесь обращаться!

Оцените материал
Добавить комментарий

Капча загружается...