Gọi một chức năng sau khi tạo bài đăng mới cho loại bài đăng tùy chỉnh WordPress?


8

Giả sử tôi đã tạo một loại bài mới 'product'. Có cách nào để thực hiện một chức năng (người dùng tạo) khi 'product'bài đăng mới này được tạo không?


5
@dotty : Có câu trả lời nào dưới đây giúp bạn giải quyết vấn đề của mình không? Nếu vậy, vui lòng bỏ phiếu cho họ để cảm ơn những người đã giúp đỡ bạn và chọn câu trả lời tốt nhất để câu hỏi của bạn không nằm trong danh sách "chưa được trả lời".
MikeSchinkel

Câu trả lời:


5

Trong hàm.php:

function mynewproduct(){
    myfunction();
}
add_action( 'new_product', 'mynewproduct' );

Để biết thêm và các tài liệu chính thức, tham khảo tại đây:

http://codex.wordpress.org/Post_Status_Transitions


Tôi không nghĩ rằng new_{post_type}sẽ làm việc vì statustrong {status}_{post_type}hành động sẽ không bao giờ được thiết lập để new.
Spencer

Trong trường hợp này, nó trả tiền để biết ý nghĩa của 'được tạo ra'
Tom J Nowell

3

Xin chào @dotty:

Hãy xem phần cuối của wp_insert_post()chức năng trong tệp /wp-includes/post.php(trên dòng 2148 đến 2392 trong WordPress 3.0.1. Lưu ý rằng WordPress sử dụng chức năng này cả để thêm và cập nhật bài đăng. )

Cuối cùng, nó có đoạn mã sau. Từ mã này bạn có thể xác định các cuộc gọi đến wp_transition_post_status()(thêm vào đó một chút) và chúng tôi có các móc hành động edit_post, post_updated, save_postwp_insert_post( thẳng thắn Tôi không biết lý do tại sao chúng tôi có hai nước này thay vì chỉ một. ) Bạn có thể sử dụng bất kỳ những người phù hợp với nhu cầu của bạn:

<?php
wp_transition_post_status($data['post_status'], $previous_status, $post);
if ( $update ) {
  do_action('edit_post', $post_ID, $post);
  $post_after = get_post($post_ID);
  do_action( 'post_updated', $post_ID, $post_after, $post_before);
}
do_action('save_post', $post_ID, $post);
do_action('wp_insert_post', $post_ID, $post);
return $post_ID;

Và như @Jan Fabry đã đề cập, có các móc hành động được tìm thấy trong wp_transition_post_status()(từ 2713 đến 2717 /wp-includes/post.phptrong WordPress 3.0.1.) Lưu ý rằng có ba trong số chúng; sử dụng khi thích hợp:

<?php
function wp_transition_post_status($new_status, $old_status, $post) {
  do_action('transition_post_status', $new_status, $old_status, $post);
  do_action("${old_status}_to_$new_status", $post);
  do_action("${new_status}_$post->post_type", $post->ID, $post);
}

2

Các wp_transition_post_statuschức năng sẽ được gọi, và điều này sẽ kích hoạt các hành động "${new_status}_$post->post_type", vì vậy nếu một productdi chuyển đến publishnhà nước, hành động publish_productsẽ được kích hoạt.


Vì vậy, tôi gán chức năng của mình cho hành động Publish_product?
chấm

@dotty: Bạn có thể làm điều đó, nhưng nếu người dùng tạo một sản phẩm nhưng chưa nhấp vào "Xuất bản", móc này sẽ không được kích hoạt. Điều này có thể hoặc không thể là những gì bạn muốn.
Jan Fabry
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.