it-swarm.com.de

URL-Umschreibung mit benutzerdefiniertem Benutzer-Meta "/% shop_name%/gallery /% gallery%"

Ich habe ein benutzerdefiniertes Benutzer-Meta = shop_name im Benutzerprofil und einen benutzerdefinierten Beitragstyp gallery erstellt.

Die Standard-URL des Beitrags ist http://localhost/gallery/%gallery%, den ich mit dem unten angegebenen Code auf die unten angegebene URL geändert habe.

Ich möchte, dass mein Permalink die Form http://localhost/%shop_name%/gallery/%gallery% hat.

Jeder Benutzer hat einen benutzerdefinierten user_meta = shop_name.

Wenn mein Benutzer also shop_name="shop3" und eine Galerie hat, deren title="Washing Machine", sollte meine Benutzer-URL http://localhost/shop3/gallery/mashing-machine sein.

Wenn ich zu http://localhost/shop3/gallery/ gehe Ich möchte, dass alle Galerien von shop3 aufgelistet werden . Stattdessen wird die Indexseite angezeigt. Wie kann ich das möglich machen?

Unten ist der Code, den ich geschrieben habe, um benutzerdefinierte URL zu erstellen, aber es auf das oben erwähnte Problem erweitern möchten.

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; 
}

Dies ist der Benutzer-Meta-%shop_name%, den ich in die URL laden möchte, wenn Beiträge angezeigt werden, die vom Autor gepostet wurden. Shopname - fila. Ich habe die Benutzerprofileinstellungen mit ACF geändert, um diese benutzerdefinierten Benutzereinstellungen zu entwickeln. 

Die Standard-Permalink-Struktur. enter image description here

Cusotm post - Gallery Gepostet von Benutzer mit tilte - gallery 1 enter image description here

Die URL des benutzerdefinierten Posts gallery mit der Standard-Permalink-Struktur, d. H. http://localhost/gallery/gallery-1/ enter image description here

Der Custom URL der benutzerdefinierten Post gallery mit benutzerdefinierter Permalink-Struktur unter Verwendung des obigen Codes, d. H. http://localhost/fila/gallery/gallery-1/ enter image description here

Wenn ich zur URL http://localhost/fila/gallery/ gehe, möchte ich, dass alle Galerien angezeigt werden, die vom Autor mit shop_name = fila gepostet wurden Homepage wird angezeigt. enter image description here

Ebenso möchte ich, wenn ich zur URL http://localhost/fila/ gehe, die Information von shop fila vom Autor gepostet bekommen angezeigt werden, stattdessen wird die Homepage angezeigt. enter image description here

1
Shahrukh Khan

Ich habe die folgenden Funktionen verwendet, um dieses Problem zu lösen.

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