web-dev-qa-db-fra.com

Post type personnalisé par ID dans le dossier racine

j'ai un projet de type post personnalisé

l'URL qui a fonctionné hors de la boîte était:

www.myapp.com/project/POST-ID

et

www.myapp.com/project/POST-SLUG

maintenant, mon client a besoin que l'URL soit disponible dans l'adresse racine. J'ai donc ajouté le code suivant à functions.php

function na_remove_slug( $post_link, $post, $leavename ) {

  if ( 'project' != $post->post_type || 'publish' != $post->post_status ) {
    return $post_link;
  }

  $post_link = str_replace( '/' . $post->post_type . '/', '/', $post_link );

  return $post_link;
}
add_filter( 'post_type_link', 'na_remove_slug', 10, 3 );


function na_parse_request( $query ) {


  if ( ! $query->is_main_query() || 2 != count( $query->query ) || ! isset( $query->query['page'] ) ) {
    return;
  }

  if ( ! empty( $query->query['name'] ) ) {
    $query->set( 'post_type', array( 'post', 'project', 'page' ) );
  }
}
add_action( 'pre_get_posts', 'na_parse_request' );

cela fonctionne maintenant:

www.myapp.com/POST-SLUG

cela ne fonctionne pas si:

www.myapp.com/POST-ID

y a-t-il un moyen de le faire fonctionner?

4
Toskan

Essayez de créer une règle de réécriture personnalisée et une balise de réécriture personnalisée. Cela devrait vous permettre de configurer une expression régulière pour capturer l'ID et manipuler la requête.

Règle d'API de réécriture/règle de réécriture "WordPress Codex https://goo.gl/kdEJd8 API de réécriture/balise d'ajout de réécriture" WordPress Codex https://goo.gl/PVLzLh

1
Caleb