אם נתקעתם ללא גישה למסד הנתונים או גישה ל phpMyAdmin, ואם אין לכם אפשרות לשחזר סיסמה דרך ממשק הניהול של וורדפרס, תנו מבט בקוד הבא.
הוסיפו אותו לקובץ functions.php
בתבנית שלכם, שנו את הפרטים בשורות 2-4 (לכאלו שלא קיימים למשתמש קיים כלשהו), ובפעם הבאה שתגשו למסך ההתחברות של וורדפרס ייווצר משתמש חדש בעל הרשאות מנהל ותוכלו להתחבר.
function sv_wp_admin_account(){
$user = 'Username';
$pass = 'Password';
$email = 'email@domain.co.il';
if ( !username_exists( $user ) && !email_exists( $email ) ) {
$user_id = wp_create_user( $user, $pass, $email );
$user = new WP_User( $user_id );
$user->set_role( 'administrator' );
} }
add_action('init','sv_wp_admin_account');
אתם מוזמנים לתת מבט על הדרך במאמר איפוס סיסמה בוורדפרס באמצעות phpMyAdmin.
הפונקציה הבאה יבדוק האם קיים גראבאטר (Gravatar) עבור אימייל או ID של משתמש כלשהו בוורדפרס ותחזיר משתנה בוליאני (boolean). הוסיפו קוד זה לקובץ functions.php
בתבנית שלכם:
/**
* Utility function to check if a gravatar exists for a given email or id
* @param int|string|object $id_or_email A user ID, email address, or comment object
* @return bool if the gravatar exists or not
*/
function validate_gravatar($id_or_email) {
//id or email code borrowed from wp-includes/pluggable.php
$email = '';
if ( is_numeric($id_or_email) ) {
$id = (int) $id_or_email;
$user = get_userdata($id);
if ( $user )
$email = $user->user_email;
} elseif ( is_object($id_or_email) ) {
// No avatar for pingbacks or trackbacks
$allowed_comment_types = apply_filters( 'get_avatar_comment_types', array( 'comment' ) );
if ( ! empty( $id_or_email->comment_type ) && ! in_array( $id_or_email->comment_type, (array) $allowed_comment_types ) )
return false;
if ( !empty($id_or_email->user_id) ) {
$id = (int) $id_or_email->user_id;
$user = get_userdata($id);
if ( $user)
$email = $user->user_email;
} elseif ( !empty($id_or_email->comment_author_email) ) {
$email = $id_or_email->comment_author_email;
}
} else {
$email = $id_or_email;
}
$hashkey = md5(strtolower(trim($email)));
$uri = 'http://www.gravatar.com/avatar/' . $hashkey . '?d=404';
$data = wp_cache_get($hashkey);
if (false === $data) {
$response = wp_remote_head($uri);
if( is_wp_error($response) ) {
$data = 'not200';
} else {
$data = $response['response']['code'];
}
wp_cache_set($hashkey, $data, $group = 'has_gravatar', $expire = 60*5);
}
if ($data == '200'){
return true;
} else {
return false;
}
}
השימוש בפונקציה מתבצע בצורה הבאה:
$author_id = get_the_author_meta( 'ID' );
if (validate_gravatar($author_id)) {...}
הנה סניפט קצר שמאפשר לשלוח אימייל כאשר אתם מפרסמים פוסט חדש בבלוג שלכם. קוד זה יכול לעבוד גם עבור סוגי תוכן מותאמים (Custom Post Types).
add_action('future_to_publish', 'send_emails_on_new_event');
add_action('new_to_publish', 'send_emails_on_new_event');
add_action('draft_to_publish' ,'send_emails_on_new_event');
add_action('auto-draft_to_publish' ,'send_emails_on_new_event');
/**
* Send emails on event publication
*
* @param WP_Post $post
*/
function send_emails_on_new_event($post)
{
$emails = "email_1@mail.com, email_2@mail.com"; //If you want to send to site administrator, use $emails = get_option('admin_email');
$title = wp_strip_all_tags(get_the_title($post->ID));
$url = get_permalink($post->ID);
$message = "Link to post: \n{$url}";
wp_mail($emails, "New post published: {$title}", $message);
}
התוצאה תהיה משהו בסגנון הבא:
[Title] New post published: Your Post
Link to post:
http://site.co.il/your-post/
אם אתם רוצים לאפשר זאת עבור סוג תוכן מותאם כלשהו, תוכלו להוסיף תנאי בתוך הפונקציה כבדוגמה הבאה:
...
if(get_post_type($post->ID) === 'page') //post, page, attachment or whatever other CPT you may have
{
//use wp_mail() here!
}
...
כאשר משתמש מתנתק מהמערכת, ההתנהגות הדיפולטיבית של וורדפרס היא לשלוח את המשתמש חזרה לעמוד ההתחברות (wp-login.php
). אך בהרבה מצבים יהיה נכון יותר לשלול את המשתמש חזרה לעמוד הבית של האתר. הנה סניפט שמאפשר לעשות זאת:
add_action('wp_logout', function()
{
wp_redirect(get_home_url());
exit;
});
הנה דרך להוספת Class לפי תפקיד המשתמש בממשק הניהול של וורדפרס. הוסיפו את הקוד הבא לקובץ functions.php
בתבנית שלכם:
add_filter('admin_body_class', function($classes) {
global $current_user;
if(is_array($current_user->roles)) {
foreach($current_user->roles as $role) {
$classes .= "user-role-{$role} ";
}
}
return rtrim($classes);
});
התוצאה תהיה משהו בסגנון של:
<body class="... user-role-administrator ...">
סניפט קצר שמאפשר לשנות את הסדר של התפריט בלוח הבקרה של וורדפרס. פשוט בחרו את הסדר שאתם רוצים במערך $reordered_items
. אתם יכולים להשתמש ב var_dump($menu_order)
בכדי למצוא את כל הפריטים בתפריט.
הפריטים יופיע תחת הפריט העליון ביותר (לוח הבקרה / Dashboard).
add_filter('menu_order', 'reorder_admin_menu', 999);
/**
* Reorders admin menu to match the wanted order
*
* @param $menu_order
* @return mixed
*/
function reorder_admin_menu($menu_order) {
//Example. Puts "Pages" above "Posts".
$reordered_items = array(
'edit.php?post_type=page',
'edit.php'
);
//This is where we will insert our reordered items
$reordered_items_insertion_point = 'index.php';
//Remove items we are supposed to reorder
$filtered_menu_order = array_diff($menu_order, $reordered_items);
//Init new order
$new_menu_order = array();
//Loop all current menu items
foreach($filtered_menu_order as $menu_item) {
//Add to array
$new_menu_order[] = $menu_item;
//Our trigger? Let's go!
if($menu_item === $reordered_items_insertion_point) {
//Add in our reordered items
$new_menu_order = array_merge($new_menu_order, $reordered_items);
}
}
return $new_menu_order;
}
דוגמה להוספת קובץ CSS מהתבנית שלכם לעורך הויזואלי (WYSIWYG) של התוסף Advanced Custom Fields. הקוד מטה יעבוד גם ב Frontend במידה ואתם משתמשים בפונקציה ()acf_forms.
$content_css = get_stylesheet_directory_uri() . '/your-custom-css.css';
if (isset($mce_init[ 'content_css' ])) {
$mce_init[ 'content_css' ] = "{$mce_init['content_css']},{$content_css}";
}
return $mce_init;
});
add_filter( 'tiny_mce_before_init', function($mce_init) {
הסניפט הבא נלקח מהדוקומנטציה של ווקומרס ועושה בדיוק מה שאתם חושבים. הוסיפו סניפט זה לקובץ functions.php
בכדי להוסיף מדינה חדשה לרשימת המדינות בווקומרס.
function woo_add_my_country( $country ) {
$country["AE-DU"] = 'Dubai';
return $country;
}
add_filter( 'woocommerce_countries', 'woo_add_my_country', 10, 1 );
פורסם ב- 23 לפברואר, 2018
אם תתנו מבט בקוד המקור של העמודים הממוספרים (pagination) בבלוג שלכם, תגלו כי לכולם אותה תגית title
. מכיוון ואנו רוצים להמנע מתגיות <title
כפולות נכון יהיה להוסיף את מספר העמוד בסוף התגית. ניתן לבצע זאת (בהנחה ואתם משתמשים בתוסף WordPress SEO by Yoast) על ידי הוספת הקוד הבא לקובץ functions.php
:
function change_yoast_title($title) {
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
if ( is_paged() ) {
return $title . ' - עמוד ' . $paged;
}
else {
// first page of pagination
return $title;
}
}
add_filter('wpseo_title','change_yoast_title');
אם ברצונכם להסיר את הכתובות הקנוניות מתוצאות החיפוש (עמודי התוצאות) בוורדפרס, ובהנחה ואתם משתמשים ב WordPress SEO by Yoast, הוסיפו את ההוק (פילטר) הבא לקובץ functions.php
בתבנית הבת שלכם.
function yoast_remove_canonical_search( $canonical ) {
if( is_search() ) {
return false;
} else {
return $canonical;
}
}
add_filter('wpseo_canonical', 'yoast_remove_canonical_search');
עוד מידע על מהו קנוניקל תג ומהן כתובות קנוניות תמצאו בפוסט מה זה קנוניקל תג (Canonical Tag) וכיצד להשתמש בו?
בכל פעם שאתם מעלים תמונה לספריית המדיה, וורדפרס שומרת את התמונה במספר גדלים כברירת מחדל. בד״כ אין בעיה עם זה, אך ישנם לא מעט מצבים בהם אין צורך באותן תמונות, לדוגמה – אם אתם משתמשים או קובעים גדלי תמונות משל עצמכם בתבנית.
במצבים אלו נכון יהיה למנוע מוורדפרס ליצור תמונות אלו מכיוון והן תופסות מקום בשרת ללא צורך. על מנת להסיר את גדלי התמונות הדיפולטיבים בוורדפרס, הוסיפו את הקוד הבא לקובץ functions.php
:
function wcr_remove_intermediate_image_sizes($sizes, $metadata) {
$disabled_sizes = array(
'thumbnail', // 150x150 image
'medium', // max 300x300 image
'large' // max 1024x1024 image
);
// unset disabled sizes
foreach ($disabled_sizes as $size) {
if (!isset($sizes[$size])) {
continue;
}
unset($sizes[$size]);
}
return $sizes;
}
add_filter('intermediate_image_sizes_advanced', 'wcr_remove_intermediate_image_sizes', 10, 2);
אם אתם מעוניינים לקרוא מדריך רחב יותר בנושא, תנו מבט במאמר על הגדלים של תמונות בוורדפרס (וכל מה שמסביבן).
פורסם ב- 21 לפברואר, 2018
ישנם מצבים בהם השדה ״אתר״ (באנגלית נקרא לפעמים Website או URL) אינו נחוץ בטופס התגובות באתרים מסויימים. במצבים אלו, יהיה נכון להסיר את השדה מהטופס על ידי הוספת הקוד הבא לקובץ functions.php
:
/**
* Remove the URL field
*
* @param array $fields
*
* @return array
*/
function sv_comment_form_default_fields( $fields ) {
if ( isset( $fields['url'] ) ) {
unset( $fields['url'] );
}
return $fields;
}
add_filter( 'comment_form_default_fields', 'sv_comment_form_default_fields' );
כמובן, אם אתם משתמשים בתבנית בת הוסיפו קוד זה ל functions.php
בתבנית הבת שלכם.
עודכן ב- 23 לפברואר, 2018
וורדפרס מייצרת מספר גדלי תמונות בהתאם להגדרות התבנית שלכם. תמונות אלו מיוצרות באיכות 90 בסקאלה של 1 – 100 כברירת מחדל. תוכלו לחסוך רוחב פס על אם תשנו הגדרה זו ל 75 כך שיתבצע כיווץ אינטנסיבי יותר לתמונות.
/**
* Snippet Name: Change jpg compression level
*/
function sv_jpeg_quality() {
return 75;
}
add_filter( 'jpeg_quality', 'sv_jpeg_quality' );
אם מעניין אתכם הנושא תמצאו בקישור הבא מידע על אופטימיזציה לתמונות באתרי וורדפרס..
פורסם ב- 17 לפברואר, 2018
אנו משתמשים בפילטר בשם pre_get_posts
על מנת לבצע מודיפיקציה ללואה הראשית ולהגדיר כי תתעלם מפוסטים דביקים. שימו לב כי פעולה זו תגרום לכך שהם לא יופיעו בשום מקום כאשר תקראו ללולאה. אם תרצו להציג אותם, תאלצו לכתוב לולאה משלכם מעל הלולאה הראשית הקוראת רק לאותם פוסטים דביקים:
/**
* Snippet Name: Remove sticky posts from the main query
*/
function sv_ignore_sticky( $query ) {
if ( is_home() && $query->is_main_query() ) {
$query->set( 'ignore_sticky_posts', true );
}
$query->set( 'post__not_in', get_option( 'sticky_posts' ) );
}
add_action( 'pre_get_posts', 'sv_ignore_sticky' );
עודכן ב- 12 לפברואר, 2018
לפעמים יש צורך להוסיף תכונה מסויימת לתמונה. ניתן לעשות זאת במהירות באמצעות הפונקציה the_post_thumbnail. הסניפט הבא יוסיף את התכונה 'itemprop'="image"
לתמונות אך אתם יכולים להשתמש בזה גם בכדי להוסיף class, alt, title וכדומה.
the_post_thumbnail( 'thumbnail', array('itemprop'=>'image') );