如果您开始编辑一篇新文章,则已经有一篇状态为auto-draft
已创建。实际上,你看到的是这篇文章。因此,您可以连接到过渡过滤器new_to_auto-draft
并在此帖子中添加一个类别:
add_action( \'new_to_auto-draft\', function( $post ) {
// Bail out, if not in admin editor.
if ( ! strpos( $_SERVER[\'REQUEST_URI\'], \'wp-admin/post-new.php\' ) ) {
return;
}
// Bail out, it no category set in $_GET.
if ( empty( $_GET[\'cat\'] ) ) {
return;
}
$cat = wp_unslash( $_GET[\'cat\'] );
// Bail out, if category does not exist.
if ( false === ( $cat = get_category_by_slug( $cat ) ) ) {
return;
}
wp_set_post_categories( $post->ID, array( $cat->term_id ) );
} );
解释正如我所说,当你打开编辑器时,马上就会创建一篇文章。
wp_insert_post()
正在呼叫
wp_transition_post_status( $new_status, $old_status, $post )
其中$new\\u状态为
auto-draft
旧的“状态”是
new
.
wp_transition_post_status()
基本上有三个动作挂钩:
我正在使用
{$old_status}_to_{$new_status}
(
new_to_auto-draft
) 因为这是你想要完成的最精确的目标。
在函数中,我们获取post对象作为参数($post
), 如果我们不在正确的位置或$_GET[\'cat\']
找不到。具有wp_unslash()
我们从中删除“\\”和其他内容$_GET[\'cat\']
. 另一种可能是使用sanitize_key()
, 也许这更合适。
现在,我们使用get_category_by_slug()
因为我们需要类别的ID才能将帖子附加到中的类别wp_set_post_categories()
. 如果未找到类别get_category_by_slug()
将返回false
然后我们就退出了。另一个想法是,如果找不到类别,就用这个slug创建一个类别。
用于自定义帖子类型和自定义分类法,以响应
这似乎不适用于自定义帖子类型/分类法
上面的示例显式地作用于post类型post
以及分类学category
. 如果要将其与自定义帖子类型和自定义TaxonononMy一起使用,则需要使用get_term_by()
而不是get_category_by_slug()
您需要使用wp_set_object_terms()
而不是wp_set_post_categories()
.
下面的示例注册了一个post类型、一个分类法,并显示了该过程:
add_action( \'new_to_auto-draft\', function( $post ) {
// Bail out, if not in admin editor.
if ( ! strpos( $_SERVER[\'REQUEST_URI\'], \'wp-admin/post-new.php\' ) ) {
return;
}
// Bail out, it no category set in $_GET.
if ( empty( $_GET[\'post_type\'] ) || \'post_slug\' !== wp_unslash( $_GET[\'post_type\'] ) ) {
return;
}
// Bail out, it no category set in $_GET.
if ( empty( $_GET[\'cat\'] ) ) {
return;
}
$cat = wp_unslash( $_GET[\'cat\'] );
// Bail out, if category does not exist.
if ( false === ( $cat = get_term_by( \'slug\', $cat, \'tax\' ) ) ) {
return;
}
wp_set_object_terms( $post->ID, array( $cat->term_id ), \'tax\' );
} );
add_action ( \'init\', function() {
$args[\'label\'] = \'Test\';
$args[\'public\'] = TRUE;
register_post_type( \'post_slug\', $args );
$args[\'label\'] = \'Taxonomy\';
register_taxonomy( \'tax\', \'post_slug\', $args );
});