
نوشته اصلی توسط
elan
نمیدونم چرا این کد رو میذارم عمل نمیکنه فقط میخوام روی برگه ها عمل کنه نه پست تایپ ها
کد PHP:
function wpse_101072_flatten_hierarchies( $page_link, $post ) { if ( $post->post_type != 'page') return $page_link;
$uri = ''; foreach ( $post->ancestors as $parent ) { $uri = get_post( $parent )->post_name . "/" . $uri; }
return str_replace( $uri, '', $page_link );}add_filter( 'page_link', 'wpse_101072_flatten_hierarchies', 10, 2 );
باسلام، برگه ها یک پست تایپ هستند. کد های بالا تنها آدرس ها را برای نمایش عوض می کنند (***** های page_link، post_type_link و ..). اگر با این ***** ها آدرس ها به صورت example.com/C در سایت نمایش دهید کار شما تمام نخواهد شد، در صورتی که وارد این آدرس ها شوید وردپرس 404 خواهد داد به دلیل آنکه داخل پست ها دنبال پستی با اسم C می گردد (با توجه به ساختار آدرس هاتون ممکن است نتیجه متفاوت باشد)، شما باید یک rewrite rule هم اضافه کنید که به برگه ها هدایت شود و دنبال C بگردد :
کد:
function myinit() {
global $wp,$wp_rewrite;
$wp_rewrite->add_rule('(.*)','index.php?post_type=page&name=$matches[1]', 'top');
}
add_action('init','myinit');
پس از قرار دادن کد بالا باید rule ها یک بار flush شود. در کل پیشنهاد نمی کنم دستی این کار را انجام دهید مگر بدهید یک برنامه نویس انجام دهد و در آخر بهتر است با افزونه های موجود کار کنید.