Saving Media - Hook nào được kích hoạt?


7

Di chuyển như thế nào,

Tôi đang cố gắng kích hoạt một số mã sẽ xảy ra khi tôi lưu một hình ảnh trong thư viện phương tiện, như thường lệ, tôi chọn tệp, tải lên, nhập dữ liệu meta và sau đó nhấp vào lưu. Tại thời điểm này tôi muốn nối vào wordpress và chuyển hướng wordpress sang một URL khác. Điều này là để thay vì đưa người dùng vào danh sách các phương tiện được tải lên, sau đó tôi có thể đưa họ đến một công cụ xử lý hình ảnh thay thế.

Tôi đã tìm thấy một bộ lọc kích hoạt ngay trước khi dữ liệu meta được tạo, nhưng không có gì khi tệp được lưu?

Cảm ơn,


Hãy thử sử dụng Trình gỡ rối móc Hikari . Nó giúp tôi phơi bày cái móc tôi cần cho một hành động tùy chỉnh.
cpilko

Richard, bạn có chắc câu trả lời nào cho câu hỏi của bạn là đúng không? Vui lòng kiểm tra Câu hỏi thường gặp, đặc biệt là "Làm cách nào để đặt câu hỏi tại đây?" phần ...
brasofilo

Câu trả lời:


4

Trên thực tế, không có hook nào được kích hoạt sau khi tải lên tập tin phương tiện, ít nhất là theo như tôi biết. Vấn đề với các hook có sẵn trong quá trình tải lên và lưu các tệp và dữ liệu phương tiện là chúng bị giới hạn ở một phần của quy trình, và vì vậy sử dụng bất kỳ trong số chúng là không đáng tin cậy. Ví dụ: add_attachmentđược kích hoạt sau khi một tệp mới hoàn thành quá trình tải lên trước khi chỉnh sửa siêu dữ liệu tệp và nếu bạn có ý định chuyển hướng người dùng tại thời điểm này, nó sẽ phá vỡ quy trình tải lên cho các tệp tiếp theo nếu chúng tôi có nhiều hơn một tệp tải lên, nó có thể phù hợp mặc dù cho các loại hành động khác.

Tuy nhiên, đối với trường hợp cụ thể của bạn, bạn có thể nối vào hook admin_inithành động và kiểm tra xem chúng tôi có ở trên màn hình thư viện phương tiện hay không sau khi chúng tôi tải lên hoặc chỉnh sửa tệp, chúng tôi biết rằng bằng cách lưu số lượng tệp đính kèm trước khi tải lên và so sánh số lượng tệp đính kèm sau tải lên:

add_action('admin_init', 'redirect_after_media_save');
function redirect_after_media_save() {

    global $pagenow;

    // when visiting the upload screen, we save the number of attachments
    if ( $pagenow == 'media-new.php' ) {
        $attachments_before = array_sum((array)wp_count_attachments());
        update_option('count_attach_before', $attachments_before);
    }

    if ( $pagenow == 'upload.php' ) { // we are on media library page

        // get attachments count before and after upload
        $attachments_before = get_option('count_attach_before');
        $attachments_after = array_sum((array)wp_count_attachments());

        if ( 
            // there are new files uploaded
            ( wp_get_referer() == admin_url('media-new.php') && $attachments_after > $attachments_before )
            ||
            // or we have just edited media file
            isset($_GET['posted'])
        ) {
                // redirect to desired location
                wp_redirect(admin_url());
                exit;
        }
    }
}

Mã này sẽ chuyển hướng người dùng đến bảng điều khiển sau khi tải lên hoặc chỉnh sửa thành công tệp phương tiện, bạn có thể điều chỉnh nó cho phù hợp với nhu cầu của mình. Bạn cũng có thể muốn chọn hook quản trị khác ngoài việc admin_initbạn muốn thực hiện các tác vụ khác ngoài chuyển hướng.


3

Có vẻ như không có hành động nào trên phương tiện lưu, nhưng có một bộ lọc. Thật không may, điều đó có nghĩa là bạn có thể làm một số thứ, bạn thực sự không thể lặp lại bất cứ điều gì hoặc bạn sẽ phá vỡ bộ lọc.

add_filter('attachment_fields_to_save', 'attachment_stuff');
function attachment_stuff($stuff){

    //Do stuff here, but don't echo anything or you'll break the filter.

    return $stuff;
}

$ Stuff là một mảng các trường đang được sử dụng bởi trang mục phương tiện. Bạn có thể thử những thứ khác như móc vào bảng điều khiển quản trị chung chung hơn và kiểm tra giá trị $ _GET ['action'] của 'editattachment'.


2

Có lẽ hơi muộn, nhưng tôi đã có một kịch bản tương tự và muốn chia sẻ giải pháp.

Trong functions.phpchủ đề (tạo plugin cũng hoạt động tốt), tôi đã sử dụng 'add_attachment'hook để tạo một bài đăng mới (loại bài đăng tùy chỉnh 'talk') dựa trên mỗi tệp được tải lên mới. Tất nhiên, ví dụ có thể làm với một chút sáng lên, nhưng điều này hoạt động để phân tích từng tệp đính kèm phương tiện được tải lên.

<?php
function cpt_from_attachment($attachment_ID)
{          
    global $current_user;
    get_currentuserinfo();

    $attachment_post = get_post( $attachment_ID );

    $type = get_post_mime_type($attachment_ID);
    if(strpos($type, 'audio') === 0)
    {
        // Create new custom post object only for audio files
        $my_post = array(
          'post_title'    => $attachment_post->post_title,
          'post_content'  => $attachment_post->post_content,
          'post_type'   => 'talk',
          'post_author'   => $current_user->ID
        );

        // Insert the custom post into the database
        $post_id = wp_insert_post( $my_post );
        wp_update_post( array(
                'ID' => $attachment_ID ,
                'post_parent' => $post_id
            )
        );
        wp_set_post_terms( $post_id, get_post_meta($attachment_ID, "artist", true), 'speaker' );
    }
}

add_action("add_attachment", 'cpt_from_attachment');
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.