سلام بر همگی؛
من تو سایتم پنل کاربری با پروفایل بلیدر جت انجین درست کردم و یه فرم هم با forms legacy جت انجین ساختم که کاربرا بتونن تو پنل کاربری پست منتشر کنن. همه چیز به درستی انجام میشه فقط میخوام زمانی که کاربرا پستی رو ایجاد میکنن به انتهای لینک پستشون post id اضافه بشه (چون احتمال یکسان شدن لینک پست ها هست!!)
از تنظیمات خود وردپرس هم نمیشه استفاده کنم چون لینک تمام صفحاتی که ایجاد کردم تغییر میکنه و طبیعتا از لحاظ سئو مشکل دار میشه و باید ریدایرکت کنم (تعداد صفحات سایتم زیاده).
آیا کدی هست که بشه بر اساس نقش کاربر (مثلا نقش مشترک) به لینک پستی که منتشر میکنه post id رو اضافه کرد؟؟؟
این کد رو پیدا کردم و تو ومپ تست گرفتم و به درستی انجام میشه. حالا چجوری میشه یه کاریش کنم که فقط برای نقش مشترک اعمال بشه.
function custom_tours_permalink( $permalink, $post ) {
if ( 'tours' === $post->post_type ) {
$permalink = trailingslashit( home_url( "/tours/{$post->post_name}{$post->ID}" ) );
}
return $permalink;
}
add_filter( 'post_type_link', 'custom_tours_permalink', 10, 2 );
function custom_tours_rewrite_rules( $rules ) {
$new_rules = array();
$new_rules['tours/([0-9]+)/(.+)/?$'] = 'index.php?job=$matches[1]';
return array_merge( $new_rules, $rules );
}
add_filter( 'rewrite_rules_array', 'custom_tours_rewrite_rules' );
از کد بالا هیچی سر در نمیارم از یک سایت خارجی پیدا کردم. امیدوارم منظورمو به درستی به اساتید محترم سایت رسونده باشم.
@Raymond
@MohammadTaher.GH
@vahid1379
function custom_tours_permalink( $permalink, $post ) {
if ( 'tours' === $post->post_type && is_user_logged_in() ) {
$user = wp_get_current_user();
if ( in_array( 'subscriber', (array) $user->roles ) ) {
$permalink = trailingslashit( home_url( "/tours/{$post->post_name}{$post->ID}" ) );
}
}
return $permalink;
}
add_filter( 'post_type_link', 'custom_tours_permalink', 10, 2 );
function custom_tours_rewrite_rules( $rules ) {
if ( is_user_logged_in() ) {
$user = wp_get_current_user();
if ( in_array( 'subscriber', (array) $user->roles ) ) {
$new_rules = array();
$new_rules['tours/([0-9]+)/(.+)/?$'] = 'index.php?job=$matches[1]';
return array_merge( $new_rules, $rules );
}
}
return $rules;
}
add_filter( 'rewrite_rules_array', 'custom_tours_rewrite_rules' );
ممنون. ولی این کد رو اجرا کردم و هیچ تغییری تو لینک نوشته ها ایجاد نشد. post id به لینک نوشته ها اضافه نشد متاسفانه
@vahid1379
یکبار به تنظیمات برید و در زیر منو پیوندهای یکتا بزنید و دکمه ذخیره رو در صفحه بزنید تا اطلاعات ریست بشه
و تست کنید کاربر که لینک میخاد مشترک باشه
این کار رو انجام دادم ولی هیچ تغییری نمیکنه. کاربر هم از نوع مشترک هست. لینک پست هایی ک کاربر با نقش مشترک ایجاد میکنه همون عنوان پست باقی می مونه و post id بهش اضافه نمیشه...
سلام خوبی...
کد زیر تست فرمایید :
function add_post_id_subscribers($permalink, $post) {
if ($post->post_status !== 'publish') {
return $permalink;
}
$author_id = $post->post_author;
$user_info = get_userdata($author_id);
if (in_array('subscriber', $user_info->roles)) {
$permalink = rtrim($permalink, '/') . '-' . $post->ID . '/';
}
return $permalink;
}
add_filter('post_link', 'add_post_id_subscribers', 10, 2);
سلام. کدی که میخواستم رو نوشتم و به درستی کار میکنه. با این کد وقتی کاربر با نقش "مشترک" از طریق پنل کاربری پستی رو ایجاد میکنه به لینک پست ایجاد شده post id اضافه میشه. (البته در صورتی که نوع ایجاد پست از نوع publish باشه و اگر pending باشه این کد کار نمیکنه)
طبق تنظیماتی که برای کاربران انجام دادم، پست هایی که کاربر ایجاد میکنه در حالت pending قرار میگیره و باید خودم نوع پست رو به publish تغییر بدم. که متاسفانه این کد برای پست های pending عمل نمیکنه.
چه چیزی باید به کد اضافه کنم که بتونم این مشکل رو برطرف کنم؟
function add_post_id_to_slug_for_subscribers_frontend($post_ID, $post, $update) {
if (!is_user_logged_in()) {
return;
}
if (is_admin()) {
return;
}
$user = wp_get_current_user();
if (!in_array('subscriber', (array) $user->roles)) {
return;
}
remove_action('save_post', 'add_post_id_to_slug_for_subscribers_frontend', 10);
if (strpos($post->post_name, '-' . $post_ID) === false) {
$new_slug = sanitize_title($post->post_title) . '-' . $post_ID;
wp_update_post(array(
'ID' => $post_ID,
'post_name' => $new_slug,
));
}
add_action('save_post', 'add_post_id_to_slug_for_subscribers_frontend', 10, 3);
}
add_action('save_post', 'add_post_id_to_slug_for_subscribers_frontend', 10, 3);
این کد رو به کد بالا اضافه کردم ولی عمل نمیکنه
if ( ! in_array( $post->post_status, array( 'publish', 'pending' ), true ) ) {
return;
}
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟