自定义帖子类型:是否将“编辑|快速编辑|垃圾|查看”链接添加到日期(如果标题未显示在列中)?

时间:2012-03-28 作者:Josh

我已经为我的“推荐信”创建了一个自定义帖子类型,我不需要标题,如果标题未显示在列中,我如何编写一个函数,将“编辑|快速编辑|垃圾|查看”链接添加到“日期”。

我正在使用插件“Admin Columns”来隐藏我不想显示的列。

base

我正在尝试重新使用上一个StackExchange问题(No Edit / Delete Links for Custom Post Type? ), 然而,我已经创建了字段“Author”等。

使用此代码可以得到此结果。

result

2 个回复
最合适的回答,由SO网友:Stephen Harris 整理而成

这并不容易,因为没有钩子来添加行操作。但是,您可以取消注册日期列,并使用添加的行操作重新注册自己的日期列。不幸的是,有点黑。

我已尝试确保以下代码适用于帖子类型“推荐”

首先注册新的日期列,然后注销旧的:(使用manage_{post_type}_posts_columns 挂钩)

add_filter(\'manage_testimonials_posts_columns\', \'my_custom_date_column_head\'); 
function my_custom_date_column_head($columns) {  
    $columns[\'date2\'] = \'Date\';  
    unset( $columns[\'date\'] );
    return $columns;  
}
然后使新的日期列可排序(按“日期”)。使用manage_edit-{post_type}_sortable_columns 挂钩)

add_filter( \'manage_edit-testimonials_sortable_columns\', \'my_custom_date_column_sort\' );
function my_custom_date_column_sort( $columns ) {
    $columns[\'date2\'] = \'date\';
    return $columns;
}
现在是有趣的一点-显示专栏的内容。我几乎复制并粘贴了WordPress用来填充日期列的内容,然后在末尾添加了操作。

使用manage_{post_type}_posts_custom_columns 挂钩)

add_action( "manage_testimonials_posts_custom_column", \'my_custom_date_column_content\',10,2);
function my_custom_date_column_content($column, $post_id ){
    global $post,$mode;

    if( \'date2\' != $column )
        return;

    //**** Display default content of date column *******//

    if ( \'0000-00-00 00:00:00\' == $post->post_date ) {
        $t_time = $h_time = __( \'Unpublished\' );
        $time_diff = 0;
    } else {
        $t_time = get_the_time( __( \'Y/m/d g:i:s A\' ) );
        $m_time = $post->post_date;
        $time = get_post_time( \'G\', true, $post );

        $time_diff = time() - $time;

        if ( $time_diff > 0 && $time_diff < 24*60*60 )
            $h_time = sprintf( __( \'%s ago\' ), human_time_diff( $time ) );
        else
            $h_time = mysql2date( __( \'Y/m/d\' ), $m_time );
    }

    if ( \'excerpt\' == $mode )
        echo apply_filters( \'post_date_column_time\', $t_time, $post, $column, $mode );
    else
        echo \'<abbr title="\' . $t_time . \'">\' . apply_filters( \'post_date_column_time\', $h_time, $post, $column, $mode ) . \'</abbr>\';

    echo \'<br />\';

    if ( \'publish\' == $post->post_status ) {
        _e( \'Published\' );

    } elseif ( \'future\' == $post->post_status ) {
        if ( $time_diff > 0 )
            echo \'<strong class="attention">\' . __( \'Missed schedule\' ) . \'</strong>\';
        else
        _e( \'Scheduled\' );

    } else {
        _e( \'Last Modified\' );
    }

    //***** END  -- Display default content of date column *******//


    //***** START  -- Our actions  *******//

    //First set up some variables
    $actions = array();
    $post_type_object = get_post_type_object( $post->post_type );
    $can_edit_post = current_user_can( $post_type_object->cap->edit_post, $post->ID );


    //Actions to edit
    if ( $can_edit_post && \'trash\' != $post->post_status ) {
        $actions[\'edit\'] = \'<a href="\' . get_edit_post_link( $post->ID, true ) . \'" title="\' . esc_attr( __( \'Edit this item\' ) ) . \'">\' . __( \'Edit\' ) . \'</a>\';
        $actions[\'inline hide-if-no-js\'] = \'<a href="#" class="editinline" title="\' . esc_attr( __( \'Edit this item inline\' ) ) . \'">\' . __( \'Quick&nbsp;Edit\' ) . \'</a>\';
    }

    //Actions to delete/trash
    if ( current_user_can( $post_type_object->cap->delete_post, $post->ID ) ) {
        if ( \'trash\' == $post->post_status )
            $actions[\'untrash\'] = "<a title=\'" . esc_attr( __( \'Restore this item from the Trash\' ) ) . "\' href=\'" . wp_nonce_url( admin_url( sprintf( $post_type_object->_edit_link . \'&amp;action=untrash\', $post->ID ) ), \'untrash-\' . $post->post_type . \'_\' . $post->ID ) . "\'>" . __( \'Restore\' ) . "</a>";

        elseif ( EMPTY_TRASH_DAYS )
            $actions[\'trash\'] = "<a class=\'submitdelete\' title=\'" . esc_attr( __( \'Move this item to the Trash\' ) ) . "\' href=\'" . get_delete_post_link( $post->ID ) . "\'>" . __( \'Trash\' ) . "</a>";

        if ( \'trash\' == $post->post_status || !EMPTY_TRASH_DAYS )
            $actions[\'delete\'] = "<a class=\'submitdelete\' title=\'" . esc_attr( __( \'Delete this item permanently\' ) ) . "\' href=\'" . get_delete_post_link( $post->ID, \'\', true ) . "\'>" . __( \'Delete Permanently\' ) . "</a>";
    }

    //Actions to view/preview
        if ( in_array( $post->post_status, array( \'pending\', \'draft\', \'future\' ) ) ) {
            if ( $can_edit_post )
                $actions[\'view\'] = \'<a href="\' . esc_url( add_query_arg( \'preview\', \'true\', get_permalink( $post->ID ) ) ) . \'" title="\' . esc_attr( sprintf( __( \'Preview &#8220;%s&#8221;\' ), $title ) ) . \'" rel="permalink">\' . __( \'Preview\' ) . \'</a>\';

        } elseif ( \'trash\' != $post->post_status ) {
                $actions[\'view\'] = \'<a href="\' . get_permalink( $post->ID ) . \'" title="\' . esc_attr( sprintf( __( \'View &#8220;%s&#8221;\' ), $title ) ) . \'" rel="permalink">\' . __( \'View\' ) . \'</a>\';
        }

    //***** END  -- Our actions  *******//

    //Echo the \'actions\' HTML, let WP_List_Table do the hard work
    echo WP_List_Table::row_actions( $actions );
}

SO网友:zod

我知道这个帖子很旧,但我添加了一个更好的答案,因为Wordpress 4.3。可以使用筛选器指定表的主列。对于此解决方案,您需要知道帖子类型和列ID(使用浏览器检查html以找到它)。在我的示例中,post类型是“event”(因此变量$screen是“edit event”),而该列是一个自定义分类法“event places”(WP称该列为“taxonomy event places”)。

add_filter( \'list_table_primary_column\', \'fix_actions_primary_column\', 10, 2 );
function fix_actions_primary_column( $default, $screen ) {
    if ( \'edit-event\' === $screen ) {
        $default = \'taxonomy-event-places\';
    }
    return $default;
}

结束

相关推荐

使用WP Admin的随机数外部

好的,我有两个wordpress页面。一个wordpress页面显示一个表单,用于为网站进行一些注册。第二个wordpress页面实际处理数据并将其插入到我拥有的自定义MySQL表中。我想使用nonce功能继承到Wordpress。用户不必是Wordpress管理员,也不必拥有任何类型的权限。有谁能给我举个例子,或者告诉我如何在Wordpress页面的WP管理之外做到这一点?感谢您提前提出建议!