web-dev-qa-db-ja.com

カスタム投稿タイプで投稿の表示回数を非表示にする

バックエンドの編集画面の後ろにある数字を隠す/削除する必要があります。

全て(30)公開済み(22)ドラフト(5)保留中(2)ゴミ(1)

私はマルチ著者ブログを運営しており、各著者は自分の投稿にアクセスできるだけなので、すべての著者の累積情報を公開したくはありません。

次のコードではビューは完全に設定解除されていますが、機能全体を削除したくはありません。

function remove__views( $views ) {
unset($views['all']);
unset($views['publish']);
unset($views['trash']);
return $views;
}
add_action( 'views_edit-post',  'remove_views' );
add_action( 'views_edit-movie', 'remove_views' );

誰かがアイデアを持っていますか、どうすれば編集画面の後ろの数字を隠す/削除することができますか - せいぜい - 各著者に関連する数字だけを表示することができますか?

5
Traveler

残念ながら、これを実行するための「きれいな」方法はありません(つまり、文字列の置換や大きな機能の塊の書き換えを使用しないで)。だから、 preg_replace ...に頼る.

リンクをフィルタ処理する必要があります。適切なフィルタが既に見つかっていることを確認してください。ビューをループして正規表現を使用して、投稿数を含む要素を削除できます。投稿にこれを実装するには、次のようなものが必要です。

add_filter( 'views_edit-post', 'wpse149143_edit_posts_views' );

function wpse149143_edit_posts_views( $views ) {
    foreach ( $views as $index => $view ) {
        $views[ $index ] = preg_replace( '/ <span class="count">\([0-9]+\)<\/span>/', '', $view );
    }

    return $views;
}
7
engelen

今日も同じ問題がありました。かなり良い解決策はおそらく明白ではありませんが、不可能でもありません。

これは、各作者に関連する数だけを表示するために使用するコードです。他のユーザーの投稿を編集する権限を持つユーザーには、引き続きフルカウントが表示されます。

add_filter('wp_count_posts', 'wpse149143_wp_count_posts', 10, 3);


/**
 * Modify returned post counts by status for the current post type.
 *  Only retrieve counts of own items for users without rights to 'edit_others_posts'
 *
 * @since   26 June 2014
 * @version 26 June 2014
 * @author  W. van Dam
 *
 * @notes   Based on wp_count_posts (wp-includes/posts.php)
 *
 * @param object $counts An object containing the current post_type's post
 *                       counts by status.
 * @param string $type   Post type.
 * @param string $perm   The permission to determine if the posts are 'readable'
 *                       by the current user.
 * 
 * @return object Number of posts for each status
 */
function wpse149143_wp_count_posts( $counts, $type, $perm ) {
    global $wpdb;

    // We only want to modify the counts shown in admin and depending on $perm being 'readable' 
    if ( ! is_admin() || 'readable' !== $perm ) {
        return $counts;
    }

    // Only modify the counts if the user is not allowed to edit the posts of others
    $post_type_object = get_post_type_object($type);
    if (current_user_can( $post_type_object->cap->edit_others_posts ) ) {
        return $counts;
    }

    $query = "SELECT post_status, COUNT( * ) AS num_posts FROM {$wpdb->posts} WHERE post_type = %s AND (post_author = %d) GROUP BY post_status";
    $results = (array) $wpdb->get_results( $wpdb->prepare( $query, $type, get_current_user_id() ), ARRAY_A );
    $counts = array_fill_keys( get_post_stati(), 0 );

    foreach ( $results as $row ) {
        $counts[ $row['post_status'] ] = $row['num_posts'];
    }

    return (object) $counts;
}
6
W van Dam

私は最も簡単な方法はCSSでそれらを隠すことだと思います、あなたはこのような何かを試すことができます:

add_action( 'admin_head', 'wpse145565_hide_post_count' );

function wpse145565_hide_post_count() {
    $css  = '<style>';
    $css .= '.subsubsub a .count { display: none; }';
    $css .= '</style>';

    echo $css;
}

基本的に、この関数はadminセクションの先頭にスタイルタグを追加して、テキストカウントのdisplayプロパティをnoneとして設定します。

0