web-dev-qa-db-ja.com

カスタム投稿タイプ:日付に「編集|クイック編集|ゴミ箱|表示」リンクを追加しますか(タイトルが列に表示されていない場合)。

自分の "紹介文"にカスタム投稿タイプを作成しました。タイトルは必要ありません。 " 編集|クイック編集|ゴミ箱|表示 "を追加する関数を書くにはどうすればいいですか?タイトルが列に表示されていない場合は、 "date"にリンクしています。

表示したくない列を非表示にするために、プラグイン「Admin Columns」を使用しています。

base 

この以前のStackExchangeの質問からこのコードを再利用しようとしています( カスタム投稿タイプの編集/削除リンクはありませんか? )。ただし、 "Author"などのフィールドは既に作成しています。

このコードを使用するとこの結果が得られます。

result 

6
Josh

行アクションを追加するためのフックがないため、これは簡単には行われません。ただし、日付列を登録解除して、行アクションを追加して自分の日付列を再登録することはできます。残念ながら少しハッキーです。

次のコードが投稿タイプ '紹介文'用であることを確認しようとしました /

まず新しい日付列を登録し、古い日付列を登録解除します。(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;  
}

次に、新しい日付列を( 'date'で)ソート可能にします。 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 );
}
3
Stephen Harris

私はこのスレッドが古くなっているのを知っています、しかし私はWordpress 4.3以来働いているより良い答えを加えます。フィルタを使用して、テーブルの主列を割り当てることができます。この解決策では、投稿の種類と列IDを知る必要があります(それを見つけるためにあなたのブラウザでHTMLを調べてください)。私の例では、投稿タイプは "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;
}
1
zod