Open iwillhappy1314 opened 4 years ago
Or instead have the populate
method accept an array of column keys as well.
public function populate($columns, $callback)
{
$columns = (array)$columns;
foreach ($columns as $column) {
$this->populate[$column] = $callback;
}
return $this;
}
Thanks both, the populate
method accepting an array of column keys seems the simplest and will look to implement this in the future.
It should also be possible to define a named function and pass this to the populate method to keep things more DRY.
<?php
// Create an array of columns to add.
$columns = [
'_name' => __('Name'),
'_deal_date' => __('Deal time'),
'_is_dealed' => __('Price'),
'_age' => __('Age'),
'_phone' => __('Phone'),
'_price' => __('Price'),
];
// Define a default populate column callback.
function populate_column( $column, $post_id) {
echo get_post_meta($post_id, $column, true);
}
// Create the post type.
$client = new PostType( 'client' );
// Modify columns.
$client->columns()
->hide([ 'title', 'date' ])
->add($columns);
// Loop over all added columns and set the default populate column callback.
foreach ( $columns as $key ) {
$client->columns->populate( $key, 'populate_column' );
}
// Populate is dealed column differently.
$client->columns()->populate( '_is_dealed', function ( $column, $post_id ) {
$deal_price = get_post_meta( $post_id, 'deal_price' );
echo ( $deal_price ) ? '<span class="is-success">Dealed</span>' : '<span class="is-default">not dealed</span>';
} );
In my usecase, i added serval post metas in columns, is there any way to set default column polulate method? so we can keep the code more dry?
maybe add a method populateDefault like the code below?