ユーザープロファイルにカスタムユーザーmeta = shop_name
とカスタム投稿タイプgallery
を作成しました
投稿のデフォルトのURLはhttp://localhost/gallery/%gallery%
で、これを以下のコードを使って下のURLに変更しました。
私のパーマリンクをhttp://localhost/%shop_name%/gallery/%gallery%
の形にしたいです。
すべてのユーザーはカスタムのuser_meta = shop_name
を持っています。
したがって、私のユーザーがshop_name="shop3"
を持ち、そのtitle="Washing Machine"
を持つギャラリーがある場合、私のユーザーURLはhttp://localhost/shop3/gallery/mashing-machine
であるべきです。
http://localhost/shop3/gallery/
に移動すると、shop3
のすべてのギャラリーがに表示されます。代わりにインデックスページが表示されています。 どうすれば可能にできますか?
以下は私がカスタムURLを作成するために書いたコードですが、上記の問題にそれを拡張したいです。
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;
}
これはユーザーメタ - %shop_name%
です - 著者によって投稿された投稿を閲覧するときにURLにロードされることを希望するショップ名 - fila
。このカスタムユーザー設定を作成するために、ACFを使用してユーザープロファイル設定を変更しました。
デフォルトのパーマリンク構造
Cusotm post - Gallery
ティルト付きユーザー投稿 - gallery 1
デフォルトのパーマリンク構造を持つカスタム投稿URL
のgallery
、すなわちhttp://localhost/gallery/gallery-1/
上記のコードを使用したカスタムパーマリンク構造を持つカスタム投稿gallery
のCustom URL
、すなわちhttp://localhost/fila/gallery/gallery-1/
私がURL http://localhost/fila/gallery/
に移動すると、作者がshop_name = fila
と投稿したすべてのギャラリーを表示したいのですが、代わりにホームページを表示しています。
同様に私がhttp://localhost/fila/
というURLに行ったとき、私は作者によって投稿されたショップフィラの情報が欲しいです代わりにホームページが表示されています。
私はこの問題を解決するために以下の関数を使いました。
//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');