操作‘SAVE_POST’不适用于快速编辑

时间:2018-06-15 作者:Shane

我读过其他类似问题的答案,但没有一个能解决我的问题。这段代码在编辑器中工作得很好,但在快速编辑或批量编辑时,它似乎根本不会启动。我做错了什么?

// link author display name to Broker Name if Author is Broker

add_action( \'save_post\', \'author_is_broker\', 200 );

function author_is_broker($post_id) {
    // page/post options
    global $lwp_options, $Listing;

    $post_types = get_post_types();

    unset($post_types[\'listings\']);

    $post_type = get_post_type();

    //Only for listings
    if(isset($post_type) && $post_type == "listings"){
        // Ignore for autosave
        if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE )  {
            return $post_id;
        } else {

            // If this is a revision, get real post ID
            if ( $parent_id = wp_is_post_revision( $post_id ) ) 
                $post_id = $parent_id;

            // Get display name of post owner
            $broker_id = get_post_field( \'post_author\', $post_id );
            $broker = get_the_author_meta(\'display_name\', $broker_id);

            // Verify directory exists for author
            $args = array(
            \'post_type\'  => \'wpbdp_listing\',
            \'author\'     => $broker_id
            );

            $wp_posts = get_posts($args);

            if (count($wp_posts)) {
                $is_broker = true;
            } else {
                return $post_id;
            }

            // If directory listing has been assigned, user is broker
            if (isset($is_broker) && $is_broker == true) {
                // add the term
                $term         = sanitize_text_field($broker);
                $Listing->add_listing_category_term(\'broker\', $term);
                // update the post
                update_post_meta( (int) $post_id, \'broker\', $term );
            }
            else {
                return $post_id;
            }
        }
    } else {
    return $post_id;
    } 
}

1 个回复
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成

这只是猜测,因为我还没有测试你的代码,但是。。。对我来说,有一部分看起来很粗略:

仅当此条件为true时,才会运行所有操作:

if(isset($post_type) && $post_type == "listings"){
在哪里$post_type 变量来自?

$post_type = get_post_type();
因此,您不向该函数调用传递任何post\\u id。。。这意味着您使用全局$post对象。但无法保证此类职位的存在。

这是有原因的save_post hook将post\\u id作为param传递-您应该在函数中使用它。。。

因此,将上面的行更改为:

$post_type = get_post_type($post_id);
应该能解决你的问题。

附言:这样做没有意义:

$post_types = get_post_types();

unset($post_types[\'listings\']);
以后,您甚至不在代码中使用该变量。。。

PPS。save_post 是一个动作,因此您不必返回其中的任何内容

结束