5

Tôi đang tìm kiếm và dùng thử trong 2 ngày mà không thành công, vui lòng trợ giúp.Chi tiết đơn đặt hàng quản trị Woocommerce - Hiển thị dữ liệu tùy chỉnh trên trang chi tiết đơn đặt hàng

Tôi muốn lọc đơn đặt hàng woocommerce để thêm chi tiết bổ sung từ db vào trang chi tiết đơn đặt hàng dựa trên thuộc tính sản phẩm nhưng tôi không thể tìm thấy móc tác vụ/bộ lọc woocommerce phù hợp cho tác vụ này. Ở đây giả sử tôi đã thay đổi $is_customized = false;

Nếu $is_customized == true thì tôi cần phải thêm dữ liệu tùy chỉnh từ cơ sở dữ liệu vào trang chi tiết đơn đặt hàng.

Chú ý: Tôi không muốn bổ sung thêm hộp meta thay vào đó tôi muốn thay đổi thứ tự bảng chi tiết cho:

  • Thay thế hình ảnh mặc định sản phẩm với hình ảnh được lưu trữ trong cơ sở dữ liệu và
  • Thêm một div chứa thuộc tính tùy chỉnh bên dưới tên sản phẩm.

Tôi đã có tất cả các giá trị này trong các biến của mình nhưng tôi không thể tìm ra móc hành động nào tôi nên sử dụng.

Tôi đã đính kèm một hình ảnh để làm rõ.

enter image description here

Chỉ cần biết nếu tôi có thể thay đổi/lọc các kết quả theo thứ tự và làm thế nào?

Tôi đánh giá cao về thời gian và trợ giúp của bạn. Cảm ơn

+0

Giống như bất kỳ cột bài tùy chỉnh loại khác được xử lý qua [ 'quản lý $ bài loại bài đăng columns'] (https://codex.wordpress.org/Plugin_API/Filter_Reference/manage_$post_type_posts_columns) và ['quản lý $ post loại bài viết cột tùy chỉnh'] (https://codex.wordpress.org/Plugin_API/Action_Reference/manage_$post_type_posts_custom_column). Và trong trường hợp đơn đặt hàng, loại bài đăng là 'shop_order'. – helgatheviking

+0

Nevermind, tôi chỉ nhìn kỹ hơn vào ảnh chụp màn hình của bạn và nó không phải là những gì tôi đã suy nghĩ. Điều đó nói rằng, nó là một metabox, do đó, lúc tồi tệ nhất bạn có thể loại bỏ nó, và thêm một phiên bản sửa đổi thay cho nó. – helgatheviking

+0

có nghĩa là không có hành động/bộ lọc nào có sẵn để lọc các kết quả này hay tùy chỉnh nó thay vì viết lại toàn bộ mô-đun? –

Trả lời

8

Dưới đây là một sự khởi đầu về cách hiển thị một số dữ liệu thêm vào woocommerce_before_order_itemmeta móc:

add_action('woocommerce_before_order_itemmeta', 'so_32457241)before_order_itemmeta', 10, 3); 
function so_32457241_before_order_itemmeta($item_id, $item, $_product){ 
    echo '<p>bacon</p>'; 
} 

Tôi không biết làm thế nào bạn đang lưu dữ liệu của bạn, vì vậy tôi không thể làm nhiều hơn một chính xác hơn gợi ý. Hãy nhớ rằng ngay sau móc đó, mọi thứ bạn đã lưu dưới dạng meta mục đơn hàng sẽ tự động hiển thị.

Việc lọc hình ảnh khó khăn hơn. Tôi đã tìm thấy số gist này là bắt đầu, nhưng nó yêu cầu một số logic điều kiện tùy chỉnh vì bạn không muốn lọc hình thu nhỏ ở mọi nơi, nhưng chỉ theo thứ tự.

Edit: Hiện nay là tốt nhất tôi có thể làm để lọc các hình nhỏ mục:

add_filter('get_post_metadata', 'so_32457241_order_thumbnail', 10, 4); 
function so_32457241_order_thumbnail($value, $post_id, $meta_key, $single) { 
    // We want to pass the actual _thumbnail_id into the filter, so requires recursion 
    static $is_recursing = false; 
    // Only filter if we're not recursing and if it is a post thumbnail ID 
    if (! $is_recursing && $meta_key === '_thumbnail_id') { 
     $is_recursing = true; // prevent this conditional when get_post_thumbnail_id() is called 
     $value = get_post_thumbnail_id($post_id); 
     $is_recursing = false; 
     $value = apply_filters('post_thumbnail_id', $value, $post_id); // yay! 
     if (! $single) { 
      $value = array($value); 
     } 
    } 
    return $value; 
} 


add_filter('post_thumbnail_id', 'so_custom_order_item_thumbnail', 10, 2); 
function so_custom_order_item_thumbnail($id, $post_id){ 
    if(is_admin()){ 
     $screen = get_current_screen(); 
     if($screen->base == 'post' && $screen->post_type == 'shop_order'){ 
      // this gets you the shop_order $post object 
      global $post; 

      // no really *good* way to check post item, but could possibly save 
      // some kind of array in the order meta 
      $id = 68; 
     } 
    } 
    return $id; 
} 
+0

Cảm ơn rất nhiều, điều chính xác của nó mà tôi thực sự đang tìm kiếm. Bạn có thể vui lòng cho tôi biết cách tôi có thể thay thế hình ảnh không? Và tôi cũng cần một bộ lọc cho số lượng ở đây. Có nghĩa là tôi không muốn hiển thị số lượng nếu điều kiện là đúng. –

+0

Tôi càng xem xét nó, tôi càng nghĩ rằng việc lọc hình ảnh sẽ rất khó khăn và có thể yêu cầu một số bộ lọc được thêm vào WooCommerce. Thật dễ dàng để làm nói chung, nhưng hàm 'get_post_thumbnail_id()' dựa hoàn toàn vào '$ post_id' và hiện tại không có cách nào mà tôi có thể thấy để gửi' $ order_item' là phiên bản của sản phẩm duy nhất là thứ tự cụ thể đó. – helgatheviking

+0

vâng, hãy để tôi giải thích. Trên thực tế nó là một công cụ thiết kế và mọi khách hàng sẽ thiết kế sản phẩm của riêng mình và rõ ràng là hình ảnh sản phẩm sẽ khác nhau mỗi lần. Tôi đã thêm thành công dữ liệu tùy chỉnh và hình ảnh từ phiên này vào giỏ hàng và sau đó đặt hàng nhưng tôi chỉ bị kẹt ở đây. Tên của hình ảnh sản phẩm nằm trong db và tôi có thể lấy nó qua id đơn đặt hàng nhưng cách ghi đè? Đó là điểm chính. –

Các vấn đề liên quan