C'est peut-être une question boiteuse, mais je ne trouve pas de réponse à cette question.
Supposons que vous souhaitiez supprimer une tonne de publications vides. Évidemment, ceux qui ont du contenu auront plus de taille.
Existe-t-il une option pour trier les messages par taille dans le tableau de bord WordPress?
Mieux encore, existe-t-il une option pour empêcher automatiquement les publications d'être publiées sans contenu? À travers fuctions.php
peut-être?
J'apprécierais votre aide!
L'ajout de colonne personnalisée et le tri par longueur de post_content est possible. Je crains que cela ne soit pas très efficace.
D'abord, vous devrez ajouter votre colonne personnalisée et afficher la longueur du contenu. J'ai supposé que le contenu découpé vous intéressait (donc '' est toujours vide).
Ensuite, vous devrez rendre cette colonne triable et écrire votre code personnalisé pour trier les articles.
/* 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' );
Il existe un moyen assez simple d'empêcher la publication de la publication. Tout ce que vous avez à faire est d'écrire votre propre action save_post
. Vous pouvez vérifier si le message est vide et, le cas échéant, lui donner le statut draft
(ou pending
, ou celui que vous souhaitiez).
La seule chose dont vous devez vous rappeler est que WP affiche un message indiquant que le message a été publié. Vous pouvez changer ce message avec le filtre redirect_post_location
.
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 );