2016-04-02 17 views
0

私は、偽のページと、より多くのタイプ(カスタムポストタイプ用)、高度なカスタムフィールド、その他の分類などのプラグインを使用してWordPressサイトのシステムを作成しました。サイトには、バンドとリリースのポストタイプがあります。カスタムポストタイプのカスタムパーマリンク

フロントエンドではすべてがうまく動作し、バンドについて読む場合は、メニューをクリックして/band/[bandname]になります。彼がリリースについて読むことを望むなら、彼は/band/[bandname]/releases/[releasename]で終わる。

私が言ったように、すべてがフロントエンドでうまくいきます。しかし、私がバックエンドでリリースを作成すると、ポストタイプのリリースのためにパーマリンクに/band/[bandname]の部分を追加するのは苦労しています。私は/band/%band%/releases/で試しましたが、バンド名を取得する場所がわからないので、%band%は文字通りに書き込まれます。何か案は?

このコードを使用しようとしました。 Bandは、リリース送信フォームの投稿オブジェクト入力です。

あなたはこのようにそれを行うことができ
add_filter('post_type_link', 'custom_permalinks', 10, 3); 

function custom_permalinks($permalink, $post, $leavename) 

{ 

$post_id = get_post_meta($_POST['band'], 'bands', true); 

if($post->post_type != 'utgivelse' || empty($permalink) || in_array($post->post_status, array('draft', 'pending', 'auto-draft'))) 
return $permalink; 
$var1 = get_post_meta($post_id, 'bands', true); 

$var1 = sanitize_title($var1); 


$permalink = str_replace('%band%', $var1, $permalink); 

return $permalink; 

} 

答えて

0

小さな微調整を行うことで、うまく動作します。その後、私はパーマリンクで変数%band%を置き換えるために、これを作成し/band/%band%/releases/

私がやったことにかなり近い
add_filter('post_type_link', 'custom_permalinks', 10, 3); 

function custom_permalinks($permalink, $post, $leavename) 

{ 
$post_id = $post->ID; 

if($post->post_type != 'utgivelse' || empty($permalink) || in_array($post->post_status, array('draft', 'pending', 'auto-draft'))) 
return $permalink; 
$var1 = get_the_title(get_post_meta($post_id, 'band', true)); 

$var1 = sanitize_title($var1); 


$permalink = str_replace('%band%', $var1, $permalink); 

return $permalink; 

} 
1

<?php 

add_filter('rewrite_rules_array','customRewriteRules'); 
add_filter('query_vars','customRewriteVars'); 

// Remember to flush_rules() when adding rules 

add_filter('init','flushRules'); 

function flushRules(){ 
    global $wp_rewrite; 
    $wp_rewrite->flush_rules(); 
} 


// Adding a new rule 
function customRewriteRules($rules) 
{ 
    $newrules = array(); 
    $newrules['bands-page/([^/]+)/([^/]+)/?'] = 'index.php?pagename=bands-page&customvar1=$matches[1]&customvar2=$matches[2]'; 
    $newrules['bands-page/([^/]+)/?'] = 'index.php?pagename=bands-page&customvar1=$matches[1]'; // pagename could be band/ 
    $finalrules = $newrules + $rules; 
     return $finalrules; 
} 

function customRewriteVars($vars) 
{ 
    array_push($vars, 'customvar1', 'customvar2'); 
    return $vars; 
} 

をあなたが望むようクエリはvarsのできるだけ多くを通過し、その後、やっているVAR($ _GET [ 'customvar1を'])を使用することができますカスタムループなどがあります。

+0

私は私のreleasesタイプに次のパーマリンクルールを追加しました。しかし、サブカテゴリが増えると、エディタにリンクしようとするとちょっと混乱します。彼らはスタイルはパーマリンクを理解していない。だから私はリリースにリンクするとき、それはバンド名を知らない。 – janlindso

+0

すべてのページの読み込み時にルールをフラッシュするのは悪い考えです。 –

+0

だから私はそれをコメントしました。そのフィルタは、新しいルールが追加されたときにのみ実行する必要があります。 – Alberto