ארכיון: סניפטים וקטעי קוד

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

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

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

עדכון תמונת השיתוף המופיעה כשמשתפים פוסט בפייסבוק

באפשרותכם לבדוק כיצד פייסבוק תציג פוסט בזמן שיתוף באמצעות ה Facebook Debugger (ולחיצה על כפתור ה Debug).

Facebook Debugger - Yoast Local Settings

אם החלפתם תמונה ובזמן שיתוף עדיין מופיעה התמונה הישנה – בצעו Debug לפוסט ואחר מכן לחצו על Scrape Again על מנת שפייסבוק יזהו את התמונה החדשה.

רק נציין כי לפעמים יש צורך ללחוץ על Scrape Again יותר מפעם אחת על מנת שפייסבוק יזהו את השינויים.

Scraping Facebook Data

החלפת הלוגו של PayPal באתרי ווקומרס

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

/**
 * Add custom gateway icons
 *
 * @param string $icon Image HTML.
 * @param string $gateway_id Gateway ID.
 *
 * @return string
 */
function sv_custom_wc_gateway_icons($icon, $gateway_id)
{
    // Example for PayPal:
    if ('paypal' == $gateway_id) {
        $icon = '<img src="' . get_stylesheet_directory_uri() . '/images/paypal.svg" alt="' . __('PayPal') . '" />';
    }
    return $icon;
}

add_filter('woocommerce_gateway_icon', 'sv_custom_wc_gateway_icons', 10, 2);

שנו את הנתיב ואת שם הקובץ לתמונה החדשה ואתם מסודרים!

שינוי הזמן עד לניתוק אוטומטי ממשק הניהול - וורדפרס

הקוד הבא מאפשר לכם להאריך את משך הזמן שלוקח עד שוורדפרס מנתקת אתכם אוטומטית מהמערכת, כלומר מממשק הניהול של וורדפרס (Automatic Logout). הוסיפו את הקוד לקובץ functions.php של התבנית שלכם:

function keep_me_logged_in_for_1_year( $expirein ) {
   return 31556926; // 1 year in seconds
}
add_filter( 'auth_cookie_expiration', 'keep_me_logged_in_for_1_year' );

עיצוב ושינוי הגדרות ענן התגיות בוורדפרס

בכדי לשנות את הנראות של ענן התגיות השתמשו בסניפט המצורף. רפרנס מלא של האפשרויות ניתן למצוא בקישור הבא:

// Tag cloud custom
function style_tags($args) {
    $args = array(
         'largest'    => '10',
         'smallest'   => '10',
         'format'     => 'list',
         );
    return $args;
}
add_filter('widget_tag_cloud_args', 'style_tags');

הגבלת הפריטים המופיעים בלוח הבקרה של וורדפרס לפי username

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

function remove_menus()
{
    global $menu;
    global $current_user;
    get_currentuserinfo();

    if($current_user->user_login == 'username')
    {
        $restricted = array(__('Posts'),
                            __('Media'),
                            __('Links'),
                            __('Pages'),
                            __('Comments'),
                            __('Appearance'),
                            __('Plugins'),
                            __('Users'),
                            __('Tools'),
                            __('Settings')
        );
        end ($menu);
        while (prev($menu)) {
            $value = explode(' ',$menu[key($menu)][0]);
            if(in_array($value[0] != NULL ? $value[0] : "" , $restricted)) {
                unset($menu[key($menu)]);
            }
        } // end while

    } // end if
}
add_action('admin_menu', 'remove_menus');

ביטול תיבות ה Meta Boxes בעמוד הראשי של לוח הבקרה

הסניפט הבא יאפשר לכם להסיר תיבות Meta Box ספציפיות מהעמוד הראשי בלוח הבקרה (Dashboard) של וורדפרס. מדובר על ה Meta Boxes הדיפולטיביות המוצגות לנו בעמוד הראשי של ממשק הניהול.

בכדי לבטל או לשנות אילו תיבות יוצגו – הוסיפו את הסניפט לקובץ functions.php בתבנית שלכם ובחרו איזה תיבות להסיר:

function my_custom_dashboard_widgets()
{
    global $wp_meta_boxes;

    // Main column (left):
    // Browser Update Required
    unset($wp_meta_boxes['dashboard']['normal']['high']['dashboard_browser_nag']);
    // PHP Update Required
    unset($wp_meta_boxes['dashboard']['normal']['high']['dashboard_php_nag']);
    // Right Now - Comments, Posts, Pages at a glance
    unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_right_now']);
    // Right Now
    unset($wp_meta_boxes['dashboard']['normal']['core']['network_dashboard_right_now']);
    // Activity
    unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_activity']);
    // Site Health Status
    unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_site_health']);

    // Side Column (right):
    // WordPress Events and News
    unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_primary']);
    // Quick Draft, Your Recent Drafts
    unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_quick_press']);

    // Recent Comments
    unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_recent_comments']);

    // Incoming Links
    unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_incoming_links']);

    // Plugins - Popular, New and Recently updated WordPress Plugins
    unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_plugins']);

    // Other WordPress News Feed
    unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_secondary']);


    // Recent Drafts List
    unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_recent_drafts']);
}

add_action('wp_dashboard_setup', 'my_custom_dashboard_widgets');

אני מדבר על העמוד הבא אם זה לא היה ברור:

ביטול תיבות ה Meta Boxes הדיפולטיביות בעמוד הראשי של לוח הבקרה

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

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

function any_ptype_on_cat($request) {

    if ( isset($request['category_name']) )
        $request['post_type'] = 'any';

    return $request;
}
add_filter('request', 'any_ptype_on_cat');

הצגת תבנית הקובץ בה הפוסט/העמוד משתמש ב Header

בכדי להציג ב header באיזו תבנית קובץ עמוד מסויים משתמש הוסיפו את הקוד הבא לקובץ functions.php:

add_action('wp_head', 'show_template');
function show_template() {
    global $template;
    print_r($template);
}

ביטול הווידג׳טים הדיפולטיבים של וורדפרס

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

// Unregister all default WordPress Widgets
function unregister_default_wp_widgets() {
    unregister_widget('WP_Widget_Pages');
    unregister_widget('WP_Widget_Calendar');
    unregister_widget('WP_Widget_Archives');
    unregister_widget('WP_Widget_Links');
    unregister_widget('WP_Widget_Meta');
    unregister_widget('WP_Widget_Search');
    unregister_widget('WP_Widget_Text');
    unregister_widget('WP_Widget_Categories');
    unregister_widget('WP_Widget_Recent_Posts');
    unregister_widget('WP_Widget_Recent_Comments');
    unregister_widget('WP_Widget_RSS');
    unregister_widget('WP_Widget_Tag_Cloud');
}
add_action('widgets_init', 'unregister_default_wp_widgets', 1);

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

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

function sv_performance( $visible = false ) {

    $stat = sprintf( '%d queries in %.3f seconds, using %.2fMB memory',
        get_num_queries(),
        timer_stop( 0, 3 ),
        memory_get_peak_usage() / 1024 / 1024
    );

    echo $visible ? $stat : "<!-- {$stat} -->" ;
}

add_action( 'wp_footer', 'sv_performance', 20 );

התוצאה תופיע כהערה בפוטר. בדקו את קוד המקור של העמוד בכדי לראות אותה:

<!-- 33 queries in 1.532 seconds, using 48.75MB memory -->

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

מעוניינים לדעת כיצד להציג את התמונה הראשית (featured image) ליד כל פוסט ועמוד כשאתם צופים ברשימת הפוסטים או העמודים בממשק הניהול של וורדפרס?

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

function posts_columns($defaults){
    $defaults['sv_post_thumbs'] = __('תמונה');
    return $defaults;
}

function posts_custom_columns($column_name, $id){
    if($column_name === 'sv_post_thumbs'){
        the_post_thumbnail( 'thumbnail' );
    }
}

add_filter('manage_posts_columns', 'posts_columns', 5);
add_action('manage_posts_custom_column', 'posts_custom_columns', 5, 2);

התוצאה תראה כנראה משהו בסגנון הבא:

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

הוספת שדות נוספים לעמוד פרופיל המשתמש

הוסיפו את הקוד הבא לקובץ functions.php בכדי להוסיף שדות משלכם לעמוד פרופיל המשתמש בלוח הבקרה של וורדפרס.


// CUSTOM USER PROFILE FIELDS
function my_custom_userfields( $contactMethods ) {

    // ADD CONTACT CUSTOM FIELDS
    $contactMethods['contact_phone_office']     = 'Office Phone';
    $contactMethods['contact_phone_mobile']     = 'Mobile Phone';
    $contactMethods['contact_office_fax']       = 'Office Fax';

    // ADD ADDRESS CUSTOM FIELDS
    $contactMethods['address_line_1']       = 'Address Line 1';
    $contactMethods['address_line_2']       = 'Address Line 2 (optional)';
    $contactMethods['address_city']         = 'City';
    $contactMethods['address_state']        = 'State';
    $contactMethods['address_zipcode']      = 'Zipcode';
}
add_filter('user_contactmethods','my_custom_userfields',10,1);

בכדי להציג שדות אלו ניתן להשתמש באחת מהמתודות הבאות:

the_author_meta('facebook', $current_author->ID)
<?php $current_author = get_userdata(get_query_var('author')); ?>
<p><a href="<?php echo esc_url($current_author->contact_phone_office);?>" title="office_phone"> Office Phone</a></p>

הוספת ווידג׳ט (תיבה חדשה) בלוח הבקרה של וורדפרס

הקוד הבא יוסיף תיבה חדשה בלוח הבקרה של וורדפרס (Dashboard). כמובן שבאפשרותכם לקבוע איזה תוכן יופיע בתיבה זו. יש להוסיף קוד זה לקובץ functions.php בתבנית שלכם:


add_action('wp_dashboard_setup', 'my_custom_dashboard_widgets');

function my_custom_dashboard_widgets() {
    wp_add_dashboard_widget('custom_help_widget', 'Help and Support', 'custom_dashboard_help');
}

function custom_dashboard_help() {
    echo '&lt;p&gt;Lorum ipsum delor sit amet et nunc&lt;/p&gt;';
}

וזה נראה כך:

הוספת ווידג׳ט (תיבה חדשה) בלוח הבקרה של וורדפרס

עיכוב פרסום הפוסטים ב RSS Feed

אני מעוניין לעכב את הפרסום ב RSS Feed של הפוסטים שאני כותב ב 10-15 דקות מכיוון ותמיד אני מגלה מספר טעויות לאחר הפרסום. סיטואציה נוספת היא מצב בו אני מעוניין שתוכן האתר יהיה אקסלוסיבי למשך זמן מסויים ולא יופיע באותו RSS פיד.

// Delay feed update
function publish_later_on_feed($where) {
    global $wpdb;

    if (is_feed()) {
        // Timestamp in WordPress format
        $now = gmdate('Y-m-d H:i:s');

        // Value for wait; + device
        $wait = '10'; // integer

        // http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_timestampdiff
        $device = 'MINUTE'; // MINUTE, HOUR, DAY, WEEK, MONTH, YEAR

        // Add SQL syntax to default $where
        $where .= " AND TIMESTAMPDIFF($device, $wpdb->posts.post_date_gmt, '$now') > $wait ";
    }
    return $where;
}
add_filter('posts_where', 'publish_later_on_feed');

הוספת סוגי תוכן מותאמים (CPT's) ל RSS feed כברירת מחדל

בכדי להוסיף סוגי תוכן מותאמים (Custom Post Types) ל RSS feed הראשי של האתר כברירת מחדל, עליכם להוסיף את הקוד הבא לקובץ functions.php של התבנית שלכם:

// ADD CUSTOM POST TYPES TO THE DEFAULT RSS FEED
function custom_feed_request( $vars ) {
 if (isset($vars['feed']) && !isset($vars['post_type']))
  $vars['post_type'] = array( 'post', 'site', 'plugin', 'theme', 'person' );
 return $vars;
}
add_filter( 'request', 'custom_feed_request' );