我试图设置一个默认标签和(不同的)默认类别描述,以防在创建时没有给出。
我已经找到了动作"pre_category_description",但没有对应的标记。我唯一能找到的是"pre_term_description",但它的行为很奇怪。
我在插件中添加了以下代码:
add_action('pre_term_description', 'default_term');
function default_term($description) {
if ($description == ''){
$description_new = "default term description";
} else {
$description_new = $description;
}
error_log("setting term description");
return $description_new;
}
add_action('pre_category_description', 'default_category');
function default_category($description) {
if ($description == ''){ // we only replace in case there is a setting and no input
$description_new = "default category description";
} else {
$description_new = $description;
}
error_log("setting category description");
return $description_new;
}但是,pre_term描述似乎同时针对标记和类别执行,术语description凌驾于类别一,尽管它是最后执行的。
如果我添加了一个新标记,就会得到以下日志条目:
[06-Dec-2018 07:44:54 UTC] setting term description由此产生的描述是“默认术语描述”。
如果我添加了一个新的类别,我会在这里得到如下信息:
[06-Dec-2018 07:44:54 UTC] setting term description
[06-Dec-2018 07:44:54 UTC] setting category description由此产生的描述也是“默认术语描述”。
如果编辑的项目是一个类别或标记,那么如何才能使其正常工作呢?
发布于 2018-12-06 08:22:35
类别和标记都是术语,这就是为什么您的代码运行了两次。
您需要使用传递给pre_term_description钩子的回调的第二个参数,它告诉您当前应用过滤器的分类:
function wpse_321166_default_term_description( $description, $taxonomy ) {
if ( $description ) {
return $description;
}
switch ( $taxonomy ) {
case 'category':
$description = 'Setting category description';
break;
case 'post_tag':
$description = 'Setting tag description';
break;
}
return $description;
}
add_action( 'pre_term_description', 'wpse_321166_default_term_description', 10, 2);钩子的文档有点难以资助,因为它有一个变量名,但是您可以看到分类法参数是如何可用的这里。
https://wordpress.stackexchange.com/questions/321166
复制相似问题