我试图设置一个默认标签和一个(不同的)默认类别描述,以防在创建时没有给出。
我找到了“pre\\u category\\u description”操作,但没有与标记对应的操作。我唯一能找到的是“pre\\u term\\u 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\\u term description,并且term description推翻了category one,尽管它是最后执行的。
如果添加新标记,则会得到以下日志条目:
[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
结果描述也是“默认术语描述”
如果编辑的项目是一个类别或标记,如何进行区分,以使其正常工作?
最合适的回答,由SO网友:Jacob Peattie 整理而成
类别和标记都是术语,这就是代码运行两次的原因。
您需要使用传递给回调函数的第二个参数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);
钩子的文档有点难以获得资金,因为它有一个变量名,但您可以看到分类参数是如何可用的
here.