আমি এই সমস্যাটি সমাধান করার দুটি উপায় দেখতে পাচ্ছি: লেখকের ইউআরএল তৈরি করে এমন ডেটা পরিবর্তন করা, বা লেখকের ইউআরএল পরিবর্তন করা। আপনার সম্ভবত পুনঃনির্দেশগুলিও পরিচালনা করা উচিত, তাই ব্যবহারকারী যখন তাদের ডাকনাম পরিবর্তন করে তখন ব্যবহারকারী সংরক্ষণাগারগুলিতে পুরানো ইউআরএলগুলি কাজ করে যেতে পারে।
লেখকের ইউআরএল পরিবর্তন করা হচ্ছে
এই প্রশ্নের দুটি অংশ রয়েছে: লেখক স্লাগের পরিবর্তে লেখক ডাকনামের সাথে আগত লিঙ্কগুলি পরিচালনা করুন এবং স্ট্যান্ডার্ড স্লাগের পরিবর্তে ডাকনাম সহ লেখক পোস্ট url উত্পন্ন করুন।
প্রথম অংশটি request
ফিল্টারটিতে ঝাঁকুনির মাধ্যমে সমাধান করা হয় , এটি কোনও লেখকের অনুরোধ কিনা তা যাচাই করে এবং স্লগের পরিবর্তে ডাকনাম দিয়ে লেখককে সন্ধান করে। যদি আমরা কোনও লেখক পাই তবে আমরা লেখক আইডি ব্যবহারের জন্য ক্যোয়ারীর প্যারামিটারগুলি পরিবর্তন করি।
add_filter( 'request', 'wpse5742_request' );
function wpse5742_request( $query_vars )
{
if ( array_key_exists( 'author_name', $query_vars ) ) {
global $wpdb;
$author_id = $wpdb->get_var( $wpdb->prepare( "SELECT user_id FROM {$wpdb->usermeta} WHERE meta_key='nickname' AND meta_value = %s", $query_vars['author_name'] ) );
if ( $author_id ) {
$query_vars['author'] = $author_id;
unset( $query_vars['author_name'] );
}
}
return $query_vars;
}
দ্বিতীয় অংশটি author_link
ফিল্টারটিতে হুকিং দিয়ে এবং স্ট্যান্ডার্ড লেখকের অংশ (দ্বারা নির্দেশিত $author_nicename
) ডাকনামের সাথে প্রতিস্থাপনের মাধ্যমে সম্পন্ন হয় ।
add_filter( 'author_link', 'wpse5742_author_link', 10, 3 );
function wpse5742_author_link( $link, $author_id, $author_nicename )
{
$author_nickname = get_user_meta( $author_id, 'nickname', true );
if ( $author_nickname ) {
$link = str_replace( $author_nicename, $author_nickname, $link );
}
return $link;
}
লেখকের ইউআরএল গঠনে ডেটা পরিবর্তন করা
সম্ভবত একটি সহজ উপায় হ'ল user_nicename
ডেটাবেজে অপ্রয়োজনীয় ক্ষেত্রটি আপডেট করা update আমি মনে করি এটি ব্যবহারকারীর লগইন থেকে উত্পন্ন এবং এর পরে আর কখনও পরিবর্তন হয়নি। তবে আমি ব্যবহারকারী পরিচালনায় বিশেষজ্ঞ নই, তাই এটি নিজের ঝুঁকিতে ব্যবহার করুন use
add_action( 'user_profile_update_errors', 'wpse5742_set_user_nicename_to_nickname', 10, 3 );
function wpse5742_set_user_nicename_to_nickname( &$errors, $update, &$user )
{
if ( ! empty( $user->nickname ) ) {
$user->user_nicename = sanitize_title( $user->nickname, $user->display_name );
}
}