it-swarm.com.de

Wie ordne ich Beiträge nach Größe im WordPress-Dashboard an?

Dies mag eine lahme Frage sein, aber ich kann keine Antwort darauf finden.

Angenommen, Sie haben eine Menge leerer Posts, die Sie löschen möchten. Offensichtlich werden diejenigen, die etwas Inhalt haben, mehr Größe haben.

Gibt es eine Möglichkeit, Beiträge im WordPress-Dashboard nach Größe zu sortieren?

Gibt es überhaupt eine Möglichkeit, die Veröffentlichung von Posts ohne Inhalt automatisch zu verhindern? Durch fuctions.php vielleicht?

Würde mich über deine Hilfe freuen!

4
RaymondM

Sortierung nach Größe

Das Hinzufügen einer benutzerdefinierten Spalte und das Sortieren nach post_content Länge ist möglich. Es wird allerdings nicht sehr effizient sein, fürchte ich.

Zuerst müssen Sie Ihre benutzerdefinierte Spalte hinzufügen und die Länge des Inhalts dort anzeigen. Ich bin davon ausgegangen, dass Sie an zugeschnittenen Inhalten interessiert sind ("" ist also noch leer).

Dann müssen Sie diese Spalte sortierbar machen und Ihren benutzerdefinierten Code schreiben, um Beiträge zu sortieren.

/* Add custom column to post list */
function add_content_size_column( $columns ) {
    return array_merge( $columns, array( 'content_size' => __( 'Size', 'your_text_domain' ) ) );
}
add_filter( 'manage_posts_columns' , 'add_content_size_column' );


/* Display custom column */
function display_posts_content_size( $column, $post_id ) {
    if ( 'content_size' == $column ) {
        echo mb_strlen( trim( get_post_field( 'post_content', $post_id ) ) );
    }
}
add_action( 'manage_posts_custom_column' , 'display_posts_content_size', 10, 2 );

/* Set custom column as sortable */
function set_content_size_column_as_sortable( $columns ) {
    $columns['content_size'] = 'content_size';

    return $columns;
}
add_filter( 'manage_edit-post_sortable_columns', 'set_content_size_column_as_sortable' );


function my_content_size_orderby( $orderby ) {
    global $wpdb;

    // Run this filter only once, when needed (it will be added by pre_get_posts)
    remove_filter( 'posts_orderby', 'my_content_size_orderby' );

    $orderby = str_replace( "{$wpdb->posts}.post_date ", "CHAR_LENGTH( TRIM({$wpdb->posts}.post_content) ) ", $orderby );

    return $orderby;
}

function my_content_size_modify_orderby( $query ) {
    if ( ! is_admin() ) return;

    if ( 'content_size' == $query->get( 'orderby' ) ) {
        add_filter( 'posts_orderby', 'my_content_size_orderby' );
    }
}
add_action( 'pre_get_posts', 'my_content_size_modify_orderby' );

Veröffentlichung verhindern

Es gibt eine ziemlich einfache Möglichkeit, die Veröffentlichung des Posts zu verhindern. Alles was Sie tun müssen, ist Ihre eigene save_post Aktion zu schreiben. Sie können überprüfen, ob der Beitrag leer ist, und in diesem Fall den Status in draft (oder pending oder was auch immer Sie möchten) ändern.

Das Einzige, woran Sie sich erinnern müssen, ist, dass WP eine Meldung anzeigt, die besagt, dass der Beitrag veröffentlicht wurde. Sie können diese Nachricht mit dem redirect_post_location-Filter ändern.

function my_save_post( $post_id ) {
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;

    // Now perform checks to validate your data. 
    $prevent_publish = ('' == trim( $_POST['content'] )); // Set to true if data was invalid.
    if ( $prevent_publish ) {
        // Unhook this function to prevent indefinite loop
        remove_action( 'save_post', 'my_save_post' );

        // Update the post to change post status
        wp_update_post( array(
            'ID' => $post_id,
            'post_status' => 'draft'
        ) );

        // Re-hook this function again
        add_action( 'save_post', 'my_save_post' );
    }
}
add_action( 'save_post', 'my_save_post' );


function my_redirect_location( $location, $post_id ) {
    if ( isset($_POST['publish']) ) {
        // Obtain current post status
        $status = get_post_status( $post_id );

        // The post was 'published', but if it is still a draft, display draft message (10).
        if ( 'draft' === $status ) {
            $location = add_query_arg( 'message', 10, $location );
        }
    }

    return $location;
}
add_filter( 'redirect_post_location', 'my_redirect_location', 10, 2 );
6