wordpress将自定义列添加到自定义帖子类型

时间:2013-08-02 16:31:42

标签: php wordpress woocommerce

我目前正在使用WooCommerce,一个用于WordPress的电子商务插件。 WooCommerce产品可以在一个新的后期类型产品中进行设置。我有以下代码,它为此帖子类型的编辑屏幕添加了一个自定义列:

add_filter( 'manage_edit-product_columns', 'my_edit_product_columns' ) ;
function my_edit_product_columns( $columns ) {
$columns = array(
    'myfield' => __( 'My field' )
);
return $columns;
}

这很好用,但不幸的是它将它添加为最后一列。有没有办法订购列?我希望此专栏直接位于“价格列”

之后

2 个答案:

答案 0 :(得分:1)

传递给函数的$ columns my_edit_product_columns是包含所有现有列的数组。您可以替换整个事物或使用任何标准数组操作来更改列和&列顺序。

例如,如果你想指定列,你会做类似的事情(取自我使用的事件自定义帖子类型):

$columns = array(  
                "cb" => "<input type=\"checkbox\" />",
                "title" => "Event Name",  
                "event_date" => "Date",   
                "start_time"=>"Time",
             );  

因此,如果您只是print_r($ columns)来查看它当前的内容,您可以手动重新排序。

要将列插入现有$ columns数组中的特定位置,请使用:

# Insert at offset 2
$offset = 2;
$newArray = array_slice($columns, 0, $offset, true) +
        array('new_column_id' => 'New Column Name') +
        array_slice($columns, $offset, NULL, true);

有关详情,请参阅此主题:array_splice() for associative arrays

// ADDED

我刚刚在本地使用称为产品的自定义帖子类型进行了测试。这段代码对我来说很好。偏移量从第1列开始,所以为了使我的新列成为第二列,我将偏移量设置为2。

   public function productsListColumns($columns){
    $columns = array(  
                "cb" => "<input type=\"checkbox\" />",
                "title" => "Product",  
                "price" => "Price"
             );  
            $offset = 2;
            $newArray = array_slice($columns, 0, $offset, true) +
            array('new_column_id' => 'New Column Name') +
            array_slice($columns, $offset, NULL, true);
    return $newArray;  
}

答案 1 :(得分:0)

请检查以下代码。您只需要使用TribeEvents :: POSTTYPE

替换您的帖子类型
  add_filter('manage_' . TribeEvents::POSTTYPE . '_posts_columns', 'column_headers');
add_action( 'manage_posts_custom_column', 'custom_columns' , 10, 2 );

function column_headers($columns)
{
    $columns['tickets-attendees']   = __( 'Attendees', 'tribe-events-calendar');
    return $columns;
}
function custom_columns( $column_id, $post_id ) {

    if ( $column_id == 'tickets-attendees' ) {
         //echo $post_id;
         $items = TribeEventsTickets::get_event_attendees($post_id );
         $attendeeCount = count($items);
         ?>
         <a href = "edit.php?post_type=tribe_events&page=tickets-attendees&event_id=<?php echo $post_id; ?>"><?php echo $attendeeCount; ?></a>

         <?php 

    }
}