Language EN
חיפוש

סניפטים וקטעי קוד

כולנו מסכימים שתוספי וורדפרס מועילים ומקלים עלינו בהמון סיטואציות. אך ייתכן ומספר שורות בקובץ functions.php של התבנית שלכם יחסוך מכם את הצורך להוסיף פלאגין נוסף לאתר שלכם.

בארכיון זה תמצאו מגוון רחב של סניפטים וקטעי קוד (Code Snippets) המאפשרים שינויים ומודיפיקציה לוורדפרס ולאופן פעולתה. אלו בעצם קטעי קוד קצרים וקולעים שנאספו במרוצת השנים.

בכל פעם שאני נתקל בקטע קוד שימושי אני מוסיפו למאגר, אז אם יש לכם סניפט מסויים שאתם מעוניינים לשתף, אשמח אם תשלחו אותו ואוסיפו למכלול הסניפטים.

הוספת Meta Box מותאם לעורך הפוסטים בוורדפרס

הוספת meta box מותאם לעורך הפוסטים עבור שמירת נתונים נוספים ללא תוסף כמו ACF. לעוד על רישום שדות מותאמים.

add_action( 'add_meta_boxes', function () {
    add_meta_box(
        'savvy_post_subtitle',
        'Post Subtitle',
        'savvy_subtitle_metabox_html',
        'post',
        'normal',
        'high'
    );
} );

function savvy_subtitle_metabox_html( $post ) {
    $value = get_post_meta( $post->ID, '_savvy_subtitle', true );
    wp_nonce_field( 'savvy_subtitle_nonce', 'savvy_subtitle_nonce' );
    printf(
        '<input type="text" name="savvy_subtitle" value="%s" style="width:100%%;" />',
        esc_attr( $value )
    );
}

add_action( 'save_post', function ( $post_id ) {
    if ( ! isset( $_POST['savvy_subtitle_nonce'] ) ||
         ! wp_verify_nonce( $_POST['savvy_subtitle_nonce'], 'savvy_subtitle_nonce' ) ) {
        return;
    }

    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
        return;
    }

    if ( isset( $_POST['savvy_subtitle'] ) ) {
        update_post_meta(
            $post_id,
            '_savvy_subtitle',
            sanitize_text_field( $_POST['savvy_subtitle'] )
        );
    }
} );

הוסיפו ל-functions.php. שנו את מפתח ה-meta, הכותרת וסוג ה-input בהתאם לצרכים שלכם.

טעינת סקריפטים רק בעמודי ניהול ספציפיים

טעינת סקריפטים וסגנונות רק בעמודי ניהול ספציפיים בכדי למנוע התנגשויות ולשמור על מהירות לוח הבקרה. לעוד על אופטימיזציה של טעינת סקריפטים.

add_action( 'admin_enqueue_scripts', function ( $hook ) {
    // Only load on the post edit screen
    if ( $hook !== 'post.php' && $hook !== 'post-new.php' ) {
        return;
    }

    wp_enqueue_style(
        'savvy-admin-custom',
        get_template_directory_uri() . '/css/admin-custom.css',
        array(),
        '1.0.0'
    );

    wp_enqueue_script(
        'savvy-admin-custom',
        get_template_directory_uri() . '/js/admin-custom.js',
        array( 'jquery' ),
        '1.0.0',
        true
    );
} );

הוסיפו ל-functions.php. הפרמטר $hook מציין איזה עמוד ניהול נטען. ערכים נפוצים: post.php, edit.php, upload.php, options-general.php.

הוספת Bulk Actions מותאמים לרשימת הפוסטים בוורדפרס

הוספת אפשרות מותאמת לתפריט bulk actions ברשימת הפוסטים. בדוגמה זו מסמנים פוסטים נבחרים כ-"Featured". לעוד על הוקים בוורדפרס.

add_filter( 'bulk_actions-edit-post', function ( $actions ) {
    $actions['mark_featured'] = 'Mark as Featured';
    return $actions;
} );

add_filter( 'handle_bulk_actions-edit-post', function ( $redirect_to, $action, $post_ids ) {
    if ( $action !== 'mark_featured' ) {
        return $redirect_to;
    }

    foreach ( $post_ids as $post_id ) {
        update_post_meta( $post_id, '_is_featured', '1' );
    }

    return add_query_arg( 'marked_featured', count( $post_ids ), $redirect_to );
}, 10, 3 );

add_action( 'admin_notices', function () {
    if ( empty( $_REQUEST['marked_featured'] ) ) {
        return;
    }

    $count = intval( $_REQUEST['marked_featured'] );
    printf(
        '<div class="notice notice-success is-dismissible"><p>%d post(s) marked as featured.</p></div>',
        $count
    );
} );

הוסיפו ל-functions.php. שנו את mark_featured ואת מפתח ה-meta בהתאם לצורך שלכם.

יצירת Shortcode פשוט עם Attributes בוורדפרס

יצירת shortcode ניתן לשימוש חוזר עם attributes. זהו הדפוס הבסיסי לכל shortcode מותאם בוורדפרס. לעוד על הוקים בוורדפרס.

function savvy_button_shortcode( $atts ) {
    $atts = shortcode_atts( array(
        'url'   => '#',
        'text'  => 'Click Here',
        'color' => 'blue',
    ), $atts, 'savvy_button' );

    return sprintf(
        '<a href="%s" class="savvy-btn savvy-btn-%s">%s</a>',
        esc_url( $atts['url'] ),
        esc_attr( $atts['color'] ),
        esc_html( $atts['text'] )
    );
}

add_shortcode( 'savvy_button', 'savvy_button_shortcode' );

הוסיפו ל-functions.php. שימוש: [savvy_button url="/contact/" text="Contact Us" color="gold"].

רישום Endpoint מותאם ב-REST API של וורדפרס

רישום endpoint מותאם ב-REST API בכדי לחשוף מידע מהתבנית או מהתוסף שלכם. לעוד על אבטחת REST API.

add_action( 'rest_api_init', function () {
    register_rest_route( 'savvy/v1', '/recent-posts/', array(
        'methods'             => 'GET',
        'callback'            => 'savvy_get_recent_posts',
        'permission_callback' => '__return_true',
    ) );
} );

function savvy_get_recent_posts() {
    $posts = get_posts( array(
        'numberposts' => 5,
        'post_status' => 'publish',
    ) );

    $data = array();
    foreach ( $posts as $post ) {
        $data[] = array(
            'id'    => $post->ID,
            'title' => $post->post_title,
            'link'  => get_permalink( $post ),
        );
    }

    return rest_ensure_response( $data );
}

הוסיפו ל-functions.php. הגישה דרך /wp-json/savvy/v1/recent-posts/. הגדירו permission_callback בכדי להגביל גישה במידת הצורך.

הוספת הודעות מותאמות בממשק הניהול של וורדפרס

הצגת הודעות מותאמות בממשק הניהול של וורדפרס. שימושי עבור אזהרות, תזכורות או הודעות הצלחה לצוות שלכם. לעוד על הוקים בוורדפרס.

add_action( 'admin_notices', function () {
    $screen = get_current_screen();

    if ( $screen->id !== 'edit-post' ) {
        return;
    }

    echo '<div class="notice notice-warning is-dismissible">';
    echo '<p>Remember to set a featured image before publishing.</p>';
    echo '</div>';
} );

הוסיפו ל-functions.php. שנו את בדיקת $screen->id ואת הטקסט לפי הצורך. השתמשו ב-notice-success, notice-error או notice-info לסגנונות נוספים.

תזמון Cron לניקוי Transients שפג תוקפם

עם הזמן, transients שפג תוקפם מצטברים בטבלת wp_options ומאטים שאילתות. הסניפט הבא מתזמן ניקוי אוטומטי שבועי. לעוד על שיפור ביצועי וורדפרס.

if ( ! wp_next_scheduled( 'savvy_cleanup_transients' ) ) {
    wp_schedule_event( time(), 'weekly', 'savvy_cleanup_transients' );
}

add_action( 'savvy_cleanup_transients', function () {
    global $wpdb;
    $wpdb->query(
        "DELETE a, b FROM {$wpdb->options} a
        LEFT JOIN {$wpdb->options} b
            ON b.option_name = REPLACE( a.option_name, '_transient_timeout_', '_transient_' )
        WHERE a.option_name LIKE '\_transient\_timeout\_%'
            AND a.option_value < UNIX_TIMESTAMP()"
    );
} );

הוסיפו ל-functions.php. ה-cron רץ פעם בשבוע ומסיר רק transients שפג תוקפם.

הסרת טקסט ה-footer בממשק הניהול

וורדפרס מציגה "Thank you for creating with WordPress" בתחתית ממשק הניהול. ניתן להסיר או להחליף את הטקסט. הוסיפו ל-functions.php. לעוד על הוקים בוורדפרס.

add_filter( 'admin_footer_text', '__return_empty_string' );
add_filter( 'update_footer', '__return_empty_string', 11 );

הגבלת מספר גרסאות הפוסט

וורדפרס שומרת גרסאות (revisions) של כל פוסט כברירת מחדל. הגבלת המספר חוסכת מקום במסד הנתונים. הוסיפו ל-wp-config.php (לפני "That's all, stop editing!"). לעוד על שיפור ביצועים.

define( 'WP_POST_REVISIONS', 3 );

הגדירו 0 לביטול מלא או מספר (למשל 3-5) להגבלה.

הסרת CSS של Block Library ב-Frontend

וורדפרס טוענת את wp-block-library.css בכל עמוד, גם כשהאתר לא משתמש בבלוקים. אם התבנית שלכם לא משתמשת ב-Gutenberg blocks, ניתן להסיר. הוסיפו ל-functions.php. לעוד על אופטימיזציית CSS.

add_action( 'wp_enqueue_scripts', function() {
	wp_dequeue_style( 'wp-block-library' );
	wp_dequeue_style( 'wp-block-library-theme' );
	wp_dequeue_style( 'global-styles' );
}, 100 );

שימו לב: אם יש תוכן מבלוקים בעמוד, ה-CSS עלול להישבר.

Savvy WordPress Development official logo