私は同様の質問に対する他の答えを読んだことがありますが、それらのどれも私の問題を解決しませんでした。このコードはエディタではうまく機能しますが、クイック編集や一括編集ではまったく作動しません。何がおかしいのですか?
// 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;
}
}
私はあなたのコードをテストしていないので、それは推測にすぎません、しかし... ...私にはかなりスケッチに見える部分があります:
すべてのアクションは、この条件が満たされている場合にのみ実行されます。
if(isset($post_type) && $post_type == "listings"){
そして$post_type
変数はどこから来たのでしょうか?
$post_type = get_post_type();
そのため、その関数呼び出しにpost_idを渡さないでください...これは、グローバル$ postオブジェクトを操作することを意味します。しかし、そのような投稿が存在するという保証はありません。
save_post
フックがpost_idをパラメータとして渡すのには理由があります - あなたはあなたの関数の中でそれを使うべきです...
そのため、上の行を次のように変更します。
$post_type = get_post_type($post_id);
あなたの問題を解決するはずです。
PS。それをすることに意味がありません:
$post_types = get_post_types();
unset($post_types['listings']);
後でそのコードでその変数を使用することすらありません...
PPS save_post
はアクションなので、何も返す必要はありません。