Недавно я создал плагин, и он работал до сегодняшнего дня:
Описание метаданных, похоже, не обновляется. Вот фрагмент кода:
// Обработка загрузки файла и его дальнейшая обработка
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' );
}
}
Мне нужны свежие глаза, чтобы выявить возможные ошибки, которые могут повлиять на обновление описания метаданных. Любая помощь будет очень ценна!
Ответ
Ваш код выглядит вполне разумно, но я вижу несколько потенциальных проблем и возможностей для улучшения, которые могут повлиять на обновление метаописаний. Давайте пройдемся по основным моментам:
-
Ошибки в синтаксисе: У Вас отсутствует точка с запятой после вызова функции
add_action('admin_init', 'md_updater_handle_file_upload')
. Она должна выглядеть так:add_action( 'admin_init', 'md_updater_handle_file_upload' );
-
Проблемы с оператором: Вы используете
&&
и>
, что указывает на 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 ) { ... } }
-
Проверка корректности данных: Убедитесь, что 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 ); } }
-
Сообщения об успехе/ошибках: Убедитесь, что функции
md_updater_upload_error_notice
,md_updater_invalid_file_notice
иmd_updater_success_notice
определены и отображают соответствующие сообщения пользователю. -
Разрешения на файлы: Проверьте, что пользователь, выполняющий загрузку, имеет права для работы с метаданными. Вы можете добавить дополнительные проверки в случае ошибок.
- Логи: Если у вас есть доступ к логам сервера, это может помочь выявить возможные ошибки или проблемы, связанные с правами на запись данных.
Попробуйте внести вышеуказанные изменения и сделать отладку, чтобы увидеть, устраняются ли проблемы с обновлением метаописаний. Если у вас возникнут другие вопросы или потребуются дополнения, не стесняйтесь обращаться!