web-dev-qa-db-ja.com

投稿コンテンツに接続する場所

the_contentフィルタが適用される前に、どのフックまたはフィルタが投稿コンテンツを編集するために使用されます。

たとえば、 Hello Worldを を各投稿の最初のテキストとして追加したい場合。

5
rob-gordon

the_contentは高い優先順位(低い番号)で使用できます。

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

負の優先順位を使用することもできます。

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

投稿の種類に関係なく、またはターゲット投稿がメインクエリの一部であるかどうかにかかわらず、これは'the_content'が使用されるたびに適用されることに注意してください。

さらに細かく制御するには、loop_start/loop_endアクションを使用してフィルタを追加および削除します。

// 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

the_contentの前に他のグローバルフィルタを適用することはありません - あなたの$priority呼び出しで add_filter 引数を使用して、他のどの関数よりも先に関数が実行されるようにすることができます。

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