因此,在将switch语句应用于过滤器时,我遇到了一些问题,当我定义case字符串时,它将其应用于我拥有的两列:
通过定义“authors”,它会覆盖“authors”和“Types”列,我如何才能这样定义它Column:get_columns(\'authors\', \'recipe-types\')
它将同时拉取作者案例和配方类型?
Here is the filters:
add_action(\'manage_recipe_posts_custom_column\', function ($column) {
Column::get_columns(\'authors\');
}, 10, 3);
add_filter(\'manage_edit-recipe_columns\', function($columns) {
unset($columns[\'author\']);
$columns = [
\'cb\' => \'<input type="checkbox" />\',
\'title\' => __(\'Title\'),
\'authors\' => __(\'Authors\'),
\'recipe-types\' => __(\'Types\'),
\'tags\' => __(\'Tags\'),
\'categories\' => __(\'Categories\'),
\'date\' => __(\'Date\'),
];
return $columns;
});
// Add \'Authors\' column to display all authors
add_filter(\'manage_recipe_posts_columns\', function($columns) {
return array_merge($columns, [
\'authors\' => __(\'Authors\'),
]);
});
Here is an example (用相同的结果覆盖两列,而不仅仅是“作者”列):
Here is the class that I\'ve created:
class Column
{
public static function get_columns($column = \'\')
{
switch ($column) {
case \'authors\':
$recipe = Recipe::init($id);
if (is_array($recipe) || is_object($recipe)) {
$authors = $recipe->get_authors();
if (isset($authors) && !empty($authors)) {
$arr = [];
foreach ($authors as $profile) {
$arr[] = \'<a href="\' . $profile->get_url() . \'">\' . $profile->get_name() . \'</a>\';
}
echo implode(\', \', $arr);
break;
}
echo "Blank";
break;
} else {
echo \'Blank\';
}
break;
case \'recipe-types\':
$categories = get_the_term_list(\'\', \'recipe-types\', \'\', \', \',
\'\');
if (!empty($categories)) {
echo $categories;
} else {
echo \'–\';
}
break;
}
return $column;
}
}
SO网友:Tom J Nowell
它总是显示作者,因为您总是输出作者列,即使$column
具有不同的值。
让我们把过滤器换掉$column
用于演示其字符串值。
首先,WP需要authors列的输出:
add_action(\'manage_recipe_posts_custom_column\', function (\'authors\') {
Column::get_columns(\'authors\');
}, 10, 3);
接下来,它再次调用该操作,但对于
recipe-types
列:
add_action(\'manage_recipe_posts_custom_column\', function (\'recipe-types\') {
Column::get_columns(\'authors\');
}, 10, 3);
请注意,即使操作告诉您要输出哪个列,该值也会被忽略。此外,请注意,该操作会使用不同的列值多次调用。想想像事件这样的行为,一个事件可以发生多次。
此外,静态方法Column::get_columns
将采用任意列名并生成正确的响应,或者至少尝试。switch语句很好,但它总是接收相同的值,这个问题与类、对象或switch语句无关,即使它只是一个函数调用,也会发生。
因此,与其将其硬编码为authors
并且想知道为什么它总是显示作者,而是传入column变量。
这让我想到Column
班这不是OOP,它只是将单个函数转换为类的静态方法。我建议删除Column
类并仅使用函数。为了实现面向对象编程,我希望能够创建Column
对象,并传入参数,并让对象自行注册所有内容,无需使用静态方法,也无需为每个列继承Column
为每个自定义列创建的对象。这样的实施将过于工程化。只需像在其他地方一样使用函数。
此外,它应该回显其输出return
陈述不正确。