web-dev-qa-db-fra.com

Où accrocher dans le contenu du post?

Quel crochet ou filtre est utilisé pour modifier le contenu de la publication avant que le filtre the_content lui soit appliqué?.

Par exemple, si je voulais ajouter Hello World, en tant que premier texte de chaque message.

5
rob-gordon

Vous pouvez utiliser the_content avec une priorité élevée (nombre inférieur).

add_filter( 'the_content', function( $content ) {
  return 'Hello World '.$content;
}, 0);

Vous pouvez même utiliser une priorité négative:

add_filter( 'the_content', function( $content ) {
  return 'Hello World '.$content;
}, -10);

Notez que cela s'appliquera chaque fois que 'the_content' est utilisé, quel que soit le type de publication ou que la publication cible fasse partie de la requête principale ou non.

Pour plus de contrôle, vous pouvez utiliser les actions loop_start/loop_end pour ajouter et supprimer le filtre:

// the function that edits post content
function my_edit_content( $content ) {
  global $post;
  // only edit specific post types
  $types = array( 'post', 'page' );
  if ( $post && in_array( $post->post_type, $types, true ) ) {
     $content = 'Hello World '. $content;
  }

  return $content;
}

// add the filter when main loop starts
add_action( 'loop_start', function( WP_Query $query ) {
   if ( $query->is_main_query() ) {
     add_filter( 'the_content', 'my_edit_content', -10 );
   }
} );

// remove the filter when main loop ends
add_action( 'loop_end', function( WP_Query $query ) {
   if ( has_filter( 'the_content', 'my_edit_content' ) ) {
     remove_filter( 'the_content', 'my_edit_content' );
   }
} );
5
gmazzap

Aucun autre filtre global n’est appliqué avant the_content - vous pouvez utiliser l’argument $priority dans votre appel add_filter pour vous assurer que votre fonction s’exécute avant les autres:

function wpse_225625_to_the_top( $content ) {
    return "Hello World\n\n\$content";
}

add_filter( 'the_content', 'wpse_225625_to_the_top', -1 /* Super important yo */  );
1
TheDeadMedic