私はかなり似た問題を抱えていました。前/次のナビゲーションからいくつかの投稿をソートして除外する必要がありました。@cfxのソリューションの問題は次のとおりでした:ajaxには対応していませんis_singular()。wp-ajaxを介してコンテンツをロードすると、関数はfalseを返します。そのため、ページの読み込みには機能しましたが、ajaxによってコンテンツが変更されたときには機能しませんでした。global $post;ここで私を助けていました。
これが私の解決策です:
/**
  * WP: join postmeta to our sql query, so we can filter for custom fields
  *
  * @param $join
  * @return string
  */
function jnz_adjacent_work_join( $join ) {
  global $post;
  if ( get_post_type( $post ) == 'work' ) {
    global $wpdb;
    return $join . "INNER JOIN $wpdb->postmeta AS m ON p.ID = m.post_id ";
  }
  return $join;
}
add_filter('get_previous_post_join', 'jnz_adjacent_work_join');
add_filter('get_next_post_join', 'jnz_adjacent_work_join');
/**
 * WP: Change order of post for prev / next navigation
  * exclude posts with custom field "not_clickable" set to true
  *
  * @param $where
  * @param $operator
  * @return string|void
  */
 function jnz_adjacent_work_where( $where, $operator ) {
   global $post;
   if ( get_post_type( $post ) == 'work' ) :
     global $wpdb;
     $where = $wpdb->prepare("WHERE p.post_title {$operator} '%s' AND p.post_type = 'work' AND p.post_status = 'publish' AND (m.meta_key = 'not_clickable' AND (m.meta_key = 'not_clickable' AND m.meta_value != 1))", $post->post_title );
   endif;
   return $where;
 }
 $gt = '<';
 $lt = '>';
 add_filter( 'get_next_post_where', function( $where ) use ( $lt ) {
   return jnz_adjacent_work_where( $where, $lt );
 });
 add_filter( 'get_previous_post_where', function( $where ) use ( $gt ) {
   return jnz_adjacent_work_where( $where, $gt );
 });
この場合、costumフィールドクエリは、cfがにnot_clickable設定されているすべての投稿を除外しtrueます。
別の問題が発生しました:一部のコンテンツを作成し、その後、そのカスタムフィールドを実装しました。そのため、クエリは、trueまたはfalseに関係なく、そのフィールドが投稿に関連付けられていない投稿も除外しました。このタイプのフィルタリングを使用する場合は、その点に注意してください。すべての投稿に値があることを確認するか、SQL構文でこれを考慮してください。
               
              
get_adjacent_postます。関数のjoin / where / sort句をフィルタリングする必要があります。