function zn_norm_path( $url ) { $p = wp_parse_url( html_entity_decode( trim( $url ) ) ); if ( ! $p ) return ''; $host = isset( $p['host'] ) ? strtolower( preg_replace( '/^www\./', '', $p['host'] ) ) : ''; if ( $host && $host !== 'zahidenotes.com' ) return ''; return '/' . trim( strtolower( isset( $p['path'] ) ? $p['path'] : '' ), '/' ); } function zn_tokens( $s ) { $s = preg_replace( '/_\d+$/', '', strtolower( $s ) ); $parts = preg_split( '/[^a-z0-9]+/', $s, -1, PREG_SPLIT_NO_EMPTY ); $stop = array( 'the', 'of', 'to', 'for', 'and', 'a', 'an', 'in', 'on', 'pdf', 'download', 'free', 'by', 'with', 'is', 'your', 'at', 'all' ); $out = array(); foreach ( $parts as $w ) { if ( in_array( $w, $stop, true ) ) continue; if ( preg_match( '/^20[1-3]\d$/', $w ) ) continue; if ( strlen( $w ) > 3 && substr( $w, -1 ) === 's' ) $w = substr( $w, 0, -1 ); $out[ $w ] = true; } return array_keys( $out ); } function zn_score( $a, $b ) { if ( ! $a || ! $b ) return 0; $i = count( array_intersect( $a, $b ) ); if ( ! $i ) return 0; $u = count( array_unique( array_merge( $a, $b ) ) ); return 0.7 * ( $i / count( $a ) ) + 0.3 * ( $i / $u ); } /* 404 par: jo purana URL approve ho chuka hai usay naye page par 301 */ add_action( 'template_redirect', function () { if ( ! is_404() ) return; $path = '/' . trim( strtolower( (string) parse_url( $_SERVER['REQUEST_URI'], PHP_URL_PATH ) ), '/' ); $map = get_option( 'zn_map', array() ); if ( isset( $map[ $path ] ) && strpos( $map[ $path ], 'id:' ) === 0 ) { $l = get_permalink( (int) substr( $map[ $path ], 3 ) ); if ( $l ) { wp_redirect( $l, 301 ); exit; } } }, 0 ); add_action( 'admin_menu', function () { add_management_page( 'ZN Link Mapper', 'ZN Link Mapper', 'manage_options', 'zn-mapper', 'zn_mapper_page' ); } ); function zn_mapper_form( $act, $offset, $label, $auto = false, $extra = '' ) { echo '
'; wp_nonce_field( 'zn_map' ); echo '' . $extra; echo '
'; if ( $auto ) echo ''; } function zn_mapper_page() { if ( ! current_user_can( 'manage_options' ) ) return; echo '

ZN Link Mapper

'; if ( ! function_exists( 'zn_link_is_broken' ) || ! function_exists( 'zn_find_post_id' ) ) { echo '

Pehle ZN Fixer aur ZN Link Cleaner snippets active hone chahiye.

'; return; } global $wpdb; $act = isset( $_POST['act'] ) ? sanitize_key( $_POST['act'] ) : ''; $offset = isset( $_POST['offset'] ) ? absint( $_POST['offset'] ) : 0; if ( $act ) check_admin_referer( 'zn_map' ); $batch = 50; $busy = false; /* ---- 1) SCAN ---- */ if ( $act === 'scan' ) { $scan = $offset === 0 ? array() : get_option( 'zn_scan', array() ); $ids = $wpdb->get_col( $wpdb->prepare( "SELECT ID FROM {$wpdb->posts} WHERE post_type IN ('post','page') AND post_status IN ('publish','draft','private') ORDER BY ID ASC LIMIT %d OFFSET %d", $batch, $offset ) ); foreach ( $ids as $id ) { $c = $wpdb->get_var( $wpdb->prepare( "SELECT post_content FROM {$wpdb->posts} WHERE ID=%d", $id ) ); if ( ! preg_match_all( '#]*?href=(["\'])(.*?)\1#is', $c, $mm ) ) continue; foreach ( $mm[2] as $u ) { if ( ! zn_link_is_broken( $u ) ) continue; $path = zn_norm_path( $u ); if ( ! $path || $path === '/' ) continue; $scan[ $path ] = isset( $scan[ $path ] ) ? $scan[ $path ] + 1 : 1; } } update_option( 'zn_scan', $scan, false ); $offset += count( $ids ); if ( count( $ids ) === $batch ) { $busy = true; echo '

Scan ho raha hai... ' . (int) $offset . ' items check hue. Tab band na karein.

'; zn_mapper_form( 'scan', $offset, 'Agla batch', true ); } else { echo '

Scan mukammal. ' . count( $scan ) . ' alag broken URLs mile. Neeche review karein.

'; } } /* ---- 2) SAVE ---- */ if ( $act === 'save' ) { $map = get_option( 'zn_map', array() ); $paths = isset( $_POST['p'] ) ? (array) wp_unslash( $_POST['p'] ) : array(); $chs = isset( $_POST['m'] ) ? (array) wp_unslash( $_POST['m'] ) : array(); foreach ( $paths as $h => $path ) { $path = sanitize_text_field( $path ); $v = isset( $chs[ $h ] ) ? sanitize_text_field( $chs[ $h ] ) : 'skip'; if ( $v === 'remove' || preg_match( '/^id:\d+$/', $v ) ) $map[ $path ] = $v; else unset( $map[ $path ] ); } update_option( 'zn_map', $map, false ); echo '

Choices save ho gaye. Jo URL "naye page" par set hain unka purana link Google/visitors ke liye bhi ab naye page par redirect hoga.

'; } /* ---- 3) APPLY ---- */ if ( $act === 'apply' ) { $dry = ! empty( $_POST['dry'] ); $map = get_option( 'zn_map', array() ); $ids = $wpdb->get_col( $wpdb->prepare( "SELECT ID FROM {$wpdb->posts} WHERE post_type IN ('post','page') AND post_status IN ('publish','draft','private') ORDER BY ID ASC LIMIT %d OFFSET %d", $batch, $offset ) ); $re = 0; $rm = 0; $posts = 0; foreach ( $ids as $id ) { $old = $wpdb->get_var( $wpdb->prepare( "SELECT post_content FROM {$wpdb->posts} WHERE ID=%d", $id ) ); $new = preg_replace_callback( '#]*?href=(["\'])(.*?)\1[^>]*>(.*?)#is', function ( $m ) use ( $map, &$re, &$rm ) { $path = zn_norm_path( $m[2] ); if ( ! $path || ! isset( $map[ $path ] ) ) return $m[0]; $ch = $map[ $path ]; if ( $ch === 'remove' ) { $rm++; return $m[3]; } if ( strpos( $ch, 'id:' ) === 0 ) { $link = get_permalink( (int) substr( $ch, 3 ) ); if ( ! $link ) return $m[0]; $frag = ( ( $h = strpos( $m[2], '#' ) ) !== false ) ? substr( $m[2], $h ) : ''; $pos = strpos( $m[0], $m[2] ); $re++; return substr_replace( $m[0], $link . $frag, $pos, strlen( $m[2] ) ); } return $m[0]; }, $old ); if ( $new === null || $new === $old ) continue; $posts++; if ( ! $dry ) { if ( ! get_post_meta( $id, '_zn_backup_map', true ) ) add_post_meta( $id, '_zn_backup_map', wp_slash( $old ), true ); $wpdb->update( $wpdb->posts, array( 'post_content' => $new ), array( 'ID' => $id ) ); clean_post_cache( $id ); } } $offset += count( $ids ); echo '

' . ( $dry ? 'DRY RUN: ' : '' ) . (int) $offset . ' items check hue. Is batch mein ' . $posts . ' posts, ' . $re . ' links naye page par, ' . $rm . ' links hata diye' . ( $dry ? ' (kuch save nahi hua)' : '' ) . '.

'; if ( count( $ids ) === $batch ) { $busy = true; zn_mapper_form( 'apply', $offset, 'Agla batch', true, $dry ? '' : '' ); } else { echo '

Mukammal.

'; } } if ( $busy ) { echo ''; return; } /* ---- Buttons ---- */ echo '

Step 1:

'; zn_mapper_form( 'scan', 0, 'Scan karo (broken links dhoondo)' ); $scan = get_option( 'zn_scan', array() ); if ( ! $scan ) { echo ''; return; } arsort( $scan ); $map = get_option( 'zn_map', array() ); /* ---- Review ---- */ $pool = array(); foreach ( $wpdb->get_results( "SELECT ID, post_title, post_name, post_type FROM {$wpdb->posts} WHERE post_status='publish' AND post_type IN ('post','page')" ) as $r ) { $pool[] = array( 'id' => (int) $r->ID, 'title' => $r->post_title, 'type' => $r->post_type, 'tok' => zn_tokens( $r->post_title . ' ' . $r->post_name ) ); } echo '

Step 2: Review

Har purane URL ke saamne sahi page chunein. "Abhi chhod do" ka matlab link jaisa hai waisa rahega. Jo URL kisi page se match nahi karte unhe "Link hata do" par rakhein.

'; echo '
'; wp_nonce_field( 'zn_map' ); echo ''; foreach ( $scan as $path => $n ) { $h = md5( $path ); $slug = basename( $path, '.html' ); $tok = zn_tokens( $slug ); $isP = strpos( $path, '/p/' ) === 0; $numbered = (bool) preg_match( '/_\d+\.html$/', $path ); $c = array(); foreach ( $pool as $p ) { $s = zn_score( $tok, $p['tok'] ); if ( $isP && $p['type'] === 'page' ) $s += 0.05; if ( $s > 0.15 ) $c[] = array( 's' => $s, 'p' => $p ); } usort( $c, function ( $a, $b ) { return $b['s'] <=> $a['s']; } ); $c = array_slice( $c, 0, 4 ); if ( isset( $map[ $path ] ) ) { $sel = $map[ $path ]; } elseif ( $c && ! $numbered && $c[0]['s'] >= 0.6 && ( ! isset( $c[1] ) || $c[0]['s'] - $c[1]['s'] >= 0.1 ) ) { $sel = 'id:' . $c[0]['p']['id']; } else { $sel = 'skip'; } echo ''; } echo '
Purana URLKitni baarKya karna hai
' . esc_html( $path ) . ( $numbered ? '
numbered slug: asli post andaze se nahi milega' : '' ) . '
' . (int) $n . '

'; echo '

Step 3: Articles mein lagao

Pehle Dry run, phir asli.

'; zn_mapper_form( 'apply', 0, 'Dry run (sirf check)', false, '' ); zn_mapper_form( 'apply', 0, 'Asli apply karo' ); echo ''; }

9th class new books 2025 pdf download

Download 9th class new books 2026 in pdf here. 9th class all subjects books download here. 9th class books for Punjab board are given in pdf below.

9th class new books pdf download

9th class all subjects books download in pdf here. 9th class new books 2025 are given below.
9th class all books download in pdf for Punjab board. Here is the list of the books available in pdf.
9th class new books 2025 pdf download

9th Class new books 2025 pdf download

The following books are available in pdf. 
1. Tarjuma tul Quran
2. Islamiat compulsory new book 2025
3. Urdu compulsory new book 2025
4. English new book 2025
5. Math new book 2025
6. Physics new book 2025
7. Chemistry new book 
8. Computer science and Entrepreneur book
9. Biology new book
10. Chemistry new book
11. Akhlaqiat new book
12. Pakistan Studies
13. Ghiza aur Ghzayat
14. Home Economics new book
15. Fashion Design Tech
16. Communication Skills 
17. Agriculture Science book
18. ICT 9th
19. Health Sciences
20. Physics Tech
Now we are working on all boards textbooks across Pakistan. You will be able to download the books of other boards in KPK, Balochistan, and Sindh as well.

Where to find new syllabus books for class 9?

You can download all subjects new book for class 9 at Zahid Notes. The pdf books are available here.
The books are given below. If you want the old syllabus books, you can still visit that page.
So, I hope that now you can choose the book you were looking for. Zahid Notes has now launched a new website where you can also download the pdf text books of Sindh board and KPK board. The books are absolutely free.
You can find other material related to class 9 below. We have already published guess papers, notes, paper pattern, paper scheme, and past papers in pdf. 

PDF Text Books

Class 0-8
9th class
10th class
12 class
Other

Leave a Comment