web-dev-qa-db-fra.com

Réécriture d'URL avec l'utilisateur personnalisé "/% nom_shop%/galerie /% galerie%"

J'ai créé un utilisateur personnalisé meta = shop_name dans le profil utilisateur et le type de message personnalisé gallery

L'URL par défaut de l'article est http://localhost/gallery/%gallery% que j'ai modifié pour donner l'URL ci-dessous à l'aide du code indiqué ci-dessous.

Je veux que mon permalien soit sous la forme de http://localhost/%shop_name%/gallery/%gallery%.

Chaque utilisateur a un user_meta = shop_name personnalisé.

Ainsi, si mon utilisateur a shop_name="shop3" et une galerie dont title="Washing Machine", mon URL d'utilisateur doit être http://localhost/shop3/gallery/mashing-machine.

Quand je vais sur http://localhost/shop3/gallery/ je veux toutes les galeries de shop3 devrait être listé . Au lieu de cela, la page d'index est affichée. Comment puis-je rendre cela possible?

Vous trouverez ci-dessous le code que j'ai écrit pour créer une URL personnalisée, mais que je souhaite étendre au problème mentionné ci-dessus.

add_action('init', 'tdd_add_rewrite_rules');
function tdd_add_rewrite_rules(){
// Register custom rewrite rules
global $wp_rewrite;
//$wp_rewrite->add_rewrite_tag('%gallery%', '([^/]+)', 'gallery=');
$wp_rewrite->add_rewrite_tag('%shop_name%', '([^/]+)', 'shop_name=');
 $wp_rewrite->add_permastruct('gallery', '/%shop_name%/gallery/%gallery%', false);
}

add_filter('post_type_link', 'tdd_permalinks', 10, 3); 
function tdd_permalinks($permalink, $post, $leavename){ 
$no_data = get_the_author_meta('ID');;
$post_id = $post->ID;
if($post->post_type != 'gallery' || empty($permalink) || in_array($post->post_status, array('draft', 'pending', 'auto-draft'))) return $permalink;
// $var1 = get_post_meta($post_id, 'posts_solicitorspeciality', true);
$var1 = get_the_author_meta('shop_name');

$var1 = sanitize_title($var1);
if(!$var1) { $var1 = $no_data; }
  $permalink = str_replace('%shop_name%', $var1, $permalink); 
  // $permalink = str_replace('%post_id%', $post_id, $permalink); 
return $permalink; 
}

C'est le méta utilisateur - %shop_name% que je veux charger dans l'URL lors de la visualisation des posts postés par l'auteur ont un nom de boutique - fila. J'ai modifié les paramètres du profil utilisateur à l'aide d'ACF pour développer ces paramètres utilisateur personnalisés. 

La structure par défaut Permalink. enter image description here

Cusotm post - Gallery Publié par utilisateur avec tilte - gallery 1 enter image description here

La URL de la publication personnalisée gallery avec la structure permalien par défaut c’est-à-dire http://localhost/gallery/gallery-1/ enter image description here

Le Custom URL de la publication personnalisée gallery avec une structure permalien personnalisée utilisant le code ci-dessus, à savoir http://localhost/fila/gallery/gallery-1/ enter image description here

Quand je vais à l'URL http://localhost/fila/gallery/ je veux toutes les galeries postées par l'auteur avec shop_name = fila à afficher, à la place, la page d'accueil est affichée. enter image description here

De même quand je vais à l'URL http://localhost/fila/ je veux les informations de shop fila posté par l'auteur à afficher, la page d'accueil est affichée. enter image description here

1
Shahrukh Khan

J'ai utilisé les fonctions suivantes pour résoudre ce problème.

   //This adds a custom query variable to the permalink
   function add_custom_query_var( $vars ){
      $vars[] = "shop_name";
      return $vars;
    }
    add_filter( 'query_vars', 'add_custom_query_var' );

    function add_rewrite_rules($aRules) {
    $aNewRules = array('shop/([^/]+)/?$' => 'index.php?pagename=shop&shop_name=$matches[1]');
    $aNewRules2 = array('shop/([^/]+)/gallery/?$' => 'index.php?post_type=gallery');
    $aRules = $aNewRules + $aNewRules2 + $aRules;
    return $aRules;
    }
    add_filter('rewrite_rules_array', 'add_rewrite_rules');

    //Here we create a custom permalink structure and replace the shop_name with custom user feild value
    function tdd_permalinks($permalink, $post, $leavename){ 
        $no_data = get_the_author_meta('ID');;
          $post_id = $post->ID;
        if($post->post_type != 'gallery' || empty($permalink) || in_array($post->post_status, array('draft', 'pending', 'auto-draft'))) return $permalink;
        $var1 = get_the_author_meta('shop_name');
        $var1 = sanitize_title($var1);
        if(!$var1) { $var1 = $no_data; }
        $permalink = str_replace('%shop_name%', $var1, $permalink); 
        return $permalink; 
    }
    add_filter('post_type_link', 'tdd_permalinks', 10, 3); 

    function rewrite_flush(){
      global $wp_rewrite;
      $gallery_structure = '/shop/%shop_name%/gallery/%gallery%';
        $wp_rewrite->add_rewrite_tag("%gallery%", '([^/]+)', "gallery=");
        $wp_rewrite->add_rewrite_tag("%shop_name%", '([^/]+)', "shop_name=");
        $wp_rewrite->add_permastruct('gallery', $gallery_structure, false);
      $wp_rewrite->flush_rules();
    }
    add_action('init','rewrite_flush');
0
Shahrukh Khan