2016-04-02 28 views
0

Ich habe ein System für eine WordPress-Website mit gefälschten Seiten und einige Plugins wie weitere Typen (für benutzerdefinierte Post-Typen), erweiterte benutzerdefinierte Felder und weitere Taxonomien erstellt. Die Website hat einen Post-Typ für Bänder und Releases.Benutzerdefinierter Permalink für benutzerdefinierte Beitragstyp

Am Frontend funktioniert alles sehr gut, und wenn ein Benutzer über eine Band lesen möchte, klickt er auf das Menü und landet bei /band/[bandname]. Wenn er über eine Veröffentlichung lesen will, landet er bei /band/[bandname]/releases/[releasename].

Wie gesagt, im Frontend läuft alles gut. Aber wenn ich ein Release im Backend erstelle, fällt es mir schwer, den /band/[bandname] Teil zum Permalink für die Post-Typ Releases hinzuzufügen. Ich habe versucht mit /band/%band%/releases/, aber% band% wird buchstäblich geschrieben, da es nicht weiß, woher man den Bandnamen bekommen soll. Irgendwelche Ideen?

Ich habe versucht, diesen Code zu verwenden. Band ist eine Post-Objekteingabe im Formular zum Senden von Releases.

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; 

} 

Antwort

0

Durch ein paar kleine Verbesserungen, habe ich es funktioniert gut. Ich habe die folgende permalink Regel zu meinem releases Typ: /band/%band%/releases/

Dann habe ich diese Variable %band% in permalink ersetzen:

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

Man könnte es wie folgt tun:

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

Sie können so viele passieren, wie Abfrage Vars, wie Sie wollen, und dann diese var verwenden ($ _GET [ 'customvar1']) ein tun benutzerdefinierte Schleife oder so ähnlich.

+0

ziemlich nah an, was ich tat. Aber wenn ich mehr Unterkategorien bekomme, versagt es irgendwie, wenn ich versuche, im Editor auf sie zu verlinken. Sie verstehen die Permalinks nicht. Wenn ich also auf die Releases verlinke, kennt es den Bandnamen nicht. – janlindso

+0

Es ist eine schlechte Idee, Regeln bei jedem Laden der Seite zu löschen. –

+0

Deshalb habe ich es kommentiert. Dieser Filter sollte nur ausgeführt werden, wenn neue Regeln hinzugefügt werden. – Alberto

Verwandte Themen