Как установить название продукта (заголовок сообщения) из метафайла EXIF ​​изображения продукта - PullRequest
0 голосов
/ 25 октября 2018

Я стараюсь добавлять свои продукты с минимальным человеческим вкладом, насколько это возможно.Поэтому я ищу решение, чтобы получить тег заголовка, который находится на моем добавленном изображении продукта, и поместить его в поле «Имя продукта» на или перед сохранением продукта.Любые попытки достичь этого терпят неудачу, потому что WordPress «думает», что заголовок не указан (поэтому слаг не может быть сгенерирован).По крайней мере, я думаю, что это так.

Смотрите скриншот поля

This is the field I'm talking about

Я пытался использовать фрагмент кода Iнашел здесь на SO и переделать его в рабочее решение, но я не могу сделать это правильно.

Вот код, который я придумал:

function fcsp_set_title_on_save( $post_id ) {

$post_thumbnail_id = get_post_thumbnail_id( $post_id );
$filemeta = wp_get_attachment_metadata( $post_thumbnail_id, FALSE );

// Set this variable to false initially.
static $updated = false;

// If title has already been set once, bail.
if ( $updated ) {
    return;
}

// Since we're updating this post's title, set this
// variable to true to ensure it doesn't happen again.
$updated = true;
$title          = $filemeta['image_meta']['title'];

// Update the post's title.
wp_update_post( [
    'ID'         => $post_id,
    'post_title' => $title,
] );
}
add_action( 'save_post', 'fcsp_set_title_on_save' );

Любая идея, как это сделать?

1 Ответ

0 голосов
/ 25 октября 2018

Пожалуйста, поместите этот код в function.php, если вы используете woocommerce (я думаю, а не пользовательский тип записи)

if(class_exists('WC_Admin_Meta_Boxes')) {
class wcsave extends WC_Admin_Meta_Boxes {
public function __construct() {
    add_action( 'save_post', array( $this, 'save_meta_boxes' ), 1, 2 );
    add_action( 'woocommerce_process_product_meta', 'WC_Meta_Box_Product_Data::save', 10, 2 );
}
public function save_meta_boxes( $post_id, $post ) {
    //$_POST enter your post data here, this will help to control the post request from product woocommerce
    //if product is updating don't execute image title code section
    if(!empty($post->post_title)) {
        return;
    }
    //if new product is being added.
    if(!empty($_POST['post_ID']) && $post_id == $_POST['post_ID']) {
        $post_thumbnail_id = get_post_thumbnail_id( $post_id );
        $attachment_data = get_post( $post_thumbnail_id,OBJECT ); 
        $title = count($attachment_data) > 0 ? $attachment_data->post_title : "PRODUCT-".$post_id;
        remove_action( 'save_post', array( $this, 'save_meta_boxes' ) , 1, 2 );
        wp_update_post( [
            'ID'         => $post_id,
            'post_title' => $title,
            'post_status' => $post->post_status
        ] );
        // re-hook this function
        add_action( 'save_post', array( $this, 'save_meta_boxes' ) , 1, 2 );
    }
}
}
new wcsave();
}

Но учтите, что, как я уже проверял, вам нужно хотя бы немногодругая информация вместе с изображением продукта, которое вы загружаете, например, описание продукта, остальное сохранит имя изображения в качестве названия продукта.

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...