Comment remplir automatiquement le champ extrait avec les 15 premiers mots du contenu de la publication? J'ai trouvé cet extrait:
function wps_excerpt_content( $content ) {
$content = "YOUR EXCERPT HERE";
return $content;
}
add_filter( 'default_excerpt', 'wps_excerpt_content' );
Mais je ne sais pas comment le modifier avec ce dont j'ai besoin. De l'aide?
Comment utiliser le filtre excerpt_length
?
function my_excerpt_lenght( $length ) {
return 15;
}
add_filter( 'excerpt_length', 'my_excerpt_lenght', 999 );
L'extrait de code OP sert à définir l'extrait par défaut lors de la création d'une publication: http://example.com/wp-admin/post-new.php
. Donc, ce n'est pas utile pour l'action souhaitée.
Consultez également la note finale pour une utilisation plus détaillée de ce filtre.
Au début, j'ai pensé à l'action save_post
pour le faire, mais j'ai trouvé un bon conseil dans cette réponse d'Eugene Manuilov .
Le code suivant renseigne automatiquement le post_excerpt
chaque fois qu'une publication est créée ou enregistrée, si elle ne comportait aucun extrait précédent .
Notez que la création d'extraits peut être grandement améliorée, car elle ne différencie pas les URL ni les mots courts.
// Define the custom excerpt length
$wpse_40574_custom_excerpt_length = 15;
add_filter( 'wp_insert_post_data', 'wpse_40574_populate_excerpt', 99, 2 );
/**
* Checks if the the post has excerpt or not
* Code reference: https://wordpress.stackexchange.com/a/52897/12615
*/
//
function wpse_40574_populate_excerpt( $data, $postarr )
{
global $wpse_40574_custom_excerpt_length;
// check if it's a valid call
if ( !in_array( $data['post_status'], array( 'draft', 'pending', 'auto-draft' ) ) && 'post' == $data['post_type'] )
{
// if the except is empty, call the excerpt creation function
if ( strlen($data['post_excerpt']) == 0 )
$data['post_excerpt'] = wpse_40574_create_excerpt( $data['post_content'], $wpse_40574_custom_excerpt_length );
}
return $data;
}
/**
* Returns the original content string if its Word count is lesser than $length,
* or a trimed version with the desired length.
* Reference: see this StackOverflow Q&A - http://stackoverflow.com/q/11521456/1287812
*/
function wpse_40574_create_excerpt( $content, $length = 20 )
{
$the_string = preg_replace( '#\s+#', ' ', $content );
$words = explode( ' ', $the_string );
/**
* The following is a more efficient way to split the $content into an array of words
* but has the caveat of spliting Url's into words ( removes the /, :, ., charachters )
* so, not very useful in this context, could be improved though.
* Note that $words[0] has to be used as the array to be dealt with (count, array_slice)
*/
//preg_match_all( '/\b[\w\d-]+\b/', $content, $words );
if( count($words) <= $length )
$result = $content;
else
$result = implode( ' ', array_slice( $words, 0, $length ) );
return $result;
}
Exemple d'utilisation du filtre default_excerpt
:
add_filter( 'default_excerpt', 'wpse_40574_excerpt_content', 10, 2 );
function wpse_40574_excerpt_content( $post_excerpt, $post )
{
// Do nothing if not the correct post type
// http://codex.wordpress.org/Post_Types
if( 'post' != $post->post_type )
return;
$post_excerpt = "DEFAULT EXCERPT FOR POSTS OF THE TYPE -POST-";
return $post_excerpt;
}