לאפשר לגולשים להוסיף פוסטים לאישור

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

אז ככה, אחד הדברים הכי כיפים זה ליצור אתר דינמי שמאפשר לגולשים להוסיף תכנים. ישנם כמה תוספים שעושים את העבודה, כמו למשל התוסף Frontend Publishing אבל הוא מתאים בעיקר לפוסטים יבשים. אם אתם רוצים ליצור טופס מורכב יותר באמצעות Advanced Custom Fields זה כבר אפשרי תודות ל- acf_form שהם יצרו. בעיקרון, זה יכול להיות מאוד מורכב אבל אפרסם לכם את הקוד הסופי שבו השתמשתי עם כמה הסברים.
הדף של הטופס
ראשית, חשוב לשים את הקוד הבא בראש הדף על מנת שהוא ישאב על ה-CSS ו-JS שנדרשים כדי שהטופס יעבוד כמו שצריך.

<?php acf_form_head(); ?>

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

        	<?php
	
	acf_form(array(
		'post_id'		=> 'new',
        'post_title'	=> true,
        'post_content' => true,
		'field_groups'	=> array( 174 , 195 ),
        'submit_value'	=> 'הוסף עסק למאגר',
        'uploader' => 'basic',
        'updated_message' => __("תודה! פרטי העסק שלך נשלחו בהצלחה והועברו לאישור המנהלים.", 'acf'),
        'html_after_fields' => '<p>לאחר שליחת הטופס לא ניתן לערוך את הפרטים. במידה וישנה טעות או שאתם רוצים לעדכן את הפרטים אנא צרו איתנו קשר.<br/></p>',
	));
	
	?>

שימו לב: יש לשנות את ה-field_group בהתאם לשדות שאתם רוצים. צרו קבוצת שדות בתוסף ותראו מה ה-ID שלהן.

בקובץ Function.php

// set relevant field as thumbnail 
 
function acf_set_featured_image( $value, $post_id, $field  ){
    
    if($value != ''){
	    //Add the value which is the image ID to the _thumbnail_id meta data for the current post
	    add_post_meta($post_id, '_thumbnail_id', $value);
    }
 
    return $value;
}

// acf/update_value/name={$field_name} - filter for a specific field based on it's name
add_filter('acf/update_value/name=busithumbnail', 'acf_set_featured_image', 10, 3);

// add new post form 

add_filter('acf/pre_save_post' , 'my_pre_save_post' );

function my_pre_save_post( $post_id ) {
	
	// bail early if not a new post
	if( $post_id !== 'new' ) {
		 
		return $post_id;
		
	}
	
	
	// vars
	$title = $_POST['fields']['field_595ba4053f651'];
	$content = $_POST['fields']['field_595ba4233f653'];
	
	// Create a new post
	$post = array(
		'post_status'	=> 'draft',
		'post_type'		=> 'businesses',
		'post_title'	=> $title,
        'post_content'	=> $content,
	);	
	
	
	// insert the post
	$post_id = wp_insert_post( $post ); 

	
	// update $_POST['return']
    $_POST['return'] = add_query_arg( array('post_id' => $post_id), $_POST['return'] );


	// return the new ID
	return $post_id;
	
}

זה קצת יותר מורכב. בעיקרון צריך להגדיר כמה דברים.
1. אם הפוסט הוא draft או publish.
2. איזה סוג פוסט זה, במקרה הזה businesses
3. צריך להגדיר אילו שדות הן הכותרת והתוכן – על מנת למצוא את הkey שלהן יש להיכנס לקבוצת השדות בתוסף, בראש הדף "אפשרויות תצוגה" לאפשר הצגת מפתח שדה ואז תוכלו לראות מה הקודים.
4. לשנות את השם של ה-field בתמונה הראשית. (כאן זה מופיע כ-busithumbnail)

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

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

.inside .field  {
    width: 50%;
    margin: 0px;
    padding: 10px !important;
    float: right;
}

.field_type-textarea {
    width: 100% !important;
}

#mceu_62 {
    display: none;
}

.page-id-175 {
    font-family: Arial !important;
}

.page-id-175 label {
    font-size: 16px !important;
}

.page-id-175 .searchy {
    display: none;
}

.acf-checkbox-list > li > .selectit {
    display: none;
}

.acf-taxonomy-field .categorychecklist-holder {
    max-height: 500px;
    padding-bottom: 20px;
}

אם אתם רוצים שלאחר פרסום תקבלו מייל, הנה מדריך ששולח מייל לאחר פרסום טיוטה.