मैं आपके स्लग को स्थानीय बनाने की कोशिश नहीं करूंगा। इसके बजाय, अपने उपयोगकर्ताओं को पर्मलिंक सेटिंग पृष्ठ पर किसी अन्य फ़ील्ड को जोड़कर उन्हें बदलने का विकल्प क्यों नहीं दिया जाए?
अपने स्लग को बचाने के load-options-permalink.php
लिए $_POST
डेटा को पकड़ने के लिए हुक और कुछ चीजें सेट करें। पृष्ठ पर एक सेटिंग फ़ील्ड भी जोड़ें।
<?php
add_action( 'load-options-permalink.php', 'wpse30021_load_permalinks' );
function wpse30021_load_permalinks()
{
if( isset( $_POST['wpse30021_cpt_base'] ) )
{
update_option( 'wpse30021_cpt_base', sanitize_title_with_dashes( $_POST['wpse30021_cpt_base'] ) );
}
// Add a settings field to the permalink page
add_settings_field( 'wpse30021_cpt_base', __( 'CPT Base' ), 'wpse30021_field_callback', 'permalink', 'optional' );
}
फिर सेटिंग फ़ील्ड के लिए कॉल बैक फ़ंक्शन:
<?php
function wpse30021_field_callback()
{
$value = get_option( 'wpse30021_cpt_base' );
echo '<input type="text" value="' . esc_attr( $value ) . '" name="wpse30021_cpt_base" id="wpse30021_cpt_base" class="regular-text" />';
}
फिर जब आप अपने पोस्ट प्रकार को पंजीकृत करते हैं, तो स्लग को पकड़ लें get_option
। यदि यह नहीं है, तो अपने डिफ़ॉल्ट का उपयोग करें।
<?php
add_action( 'init', 'wpse30021_register_post_type' );
function wpse30021_register_post_type()
{
$slug = get_option( 'wpse30021_cpt_base' );
if( ! $slug ) $slug = 'your-default-slug';
// register your post type, reference $slug for the rewrite
$args['rewrite'] = array( 'slug' => $slug );
// Obviously you probably need more $args than one....
register_post_type( 'wpse30021_pt', $args );
}
यहाँ सेटिंग्स फ़ील्ड भाग को एक प्लगइन https://gist.github.com/1275867 के रूप में दिया गया है
EDIT: एक अन्य विकल्प
आप WPLANG
निरंतर में परिभाषित किए गए आधार पर स्लग को भी बदल सकते हैं ।
बस एक त्वरित फ़ंक्शन लिखें जो डेटा रखता है ...
<?php
function wpse30021_get_slug()
{
// return a default slug
if( ! defined( 'WPLANG' ) || ! WPLANG || 'en_US' == WPLANG ) return 'press';
// array of slug data
$slugs = array(
'fr_FR' => 'presse',
'es_ES' => 'prensa'
// etc.
);
return $slugs[WPLANG];
}
फिर स्लग प्राप्त करें जहां आप अपने कस्टम पोस्ट प्रकार को पंजीकृत करते हैं।
<?php
add_action( 'init', 'wpse30021_register_post_type' );
function wpse30021_register_post_type()
{
$slug = wpse30021_get_slug();
// register your post type, reference $slug for the rewrite
$args['rewrite'] = array( 'slug' => $slug );
// Obviously you probably need more $args than one....
register_post_type( 'wpse30021_pt', $args );
}
सबसे अच्छा विकल्प, IMO, दोनों ही उपयोगकर्ता को एक विकल्प देने और ठोस चूक प्रदान करने के लिए होगा:
<?php
add_action( 'init', 'wpse30021_register_post_type' );
function wpse30021_register_post_type()
{
$slug = get_option( 'wpse30021_cpt_base' );
// They didn't set up an option, get the default
if( ! $slug ) $slug = wpse30021_get_slug();
// register your post type, reference $slug for the rewrite
$args['rewrite'] = array( 'slug' => $slug );
// Obviously you probably need more $args than one....
register_post_type( 'wpse30021_pt', $args );
}
prensa
के लिए एक स्लग सेट के साथprensa
। WPML के अनुवादित पृष्ठ स्लग का उपयोग करना जैसाpress
कि यहprensa
फिर से नहीं हो सकता है : / en / press / जो कुछ भी प्रदर्शित नहीं करता है (ध्यान दें कि अब ES लिंक पर क्लिक करने से आप / prensa / पर वापस नहीं आते हैं)। लेकिन, अगर आप / en / prensa पर जाएँ / यह काम करता है ...