رفتن به مطلب

استفاده از متاباکس داینامیک


پست های پیشنهاد شده

سلام . بنده با استفاده از کد زیر در Functions.php متاباکس داینامیک اضافه کردم . حالا با چه کدی توی قالب به صورت داینامیک فراخونیش کنم؟


<?php add_action( 'add_meta_boxes', 'dynamic_add_custom_box' );
/* Do something with the data entered */
add_action( 'save_post', 'dynamic_save_postdata' );
/* Adds a box to the main column on the Post and Page edit screens */
function dynamic_add_custom_box() {
add_meta_box(
'dynamic_sectionid',
__( 'My Tracks', 'myplugin_textdomain' ),
'dynamic_inner_custom_box',
'post');
}
/* Prints the box content */
function dynamic_inner_custom_box() {
global $post;
// Use nonce for verification
wp_nonce_field( plugin_basename( __FILE__ ), 'dynamicMeta_noncename' );
?>
<div id="meta_inner">
<?php
//get the saved meta as an arry
$songs = get_post_meta($post->ID,'songs',true);
$c = 0;
if ( count( $songs ) > 0 ) {
foreach( $songs as $track ) {
if ( isset( $track['title'] ) || isset( $track['track'] ) ) {
printf( '<p>Song Title <input type="text" name="songs[%1$s][title]" value="%2$s" /> -- Track number : <input type="text" name="songs[%1$s][track]" value="%3$s" /><span class="remove">%4$s</span></p>', $c, $track['title'], $track['track'], __( 'Remove Track' ) );
$c = $c +1;
}
}
}
?>
<span id="here"></span>
<span class="add"><?php _e('Add Tracks'); ?></span>
<script>
var $ =jQuery.noConflict();
$(document).ready(function() {
var count = <?php echo $c; ?>;
$(".add").click(function() {
count = count + 1;
$('#here').append('<p> Song Title <input type="text" name="songs['+count+'][title]" value="" /> -- Track number : <input type="text" name="songs['+count+'][track]" value="" /><span class="remove">Remove Track</span></p>' );
return false;
});
$(".remove").live('click', function() {
$(this).parent().remove();
});
});
</script>
</div><?php
}
/* When the post is saved, saves our custom data */
function dynamic_save_postdata( $post_id ) {
// verify if this is an auto save routine.
// If it is our form has not been submitted, so we dont want to do anything
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
return;
// verify this came from the our screen and with proper authorization,
// because save_post can be triggered at other times
if ( !isset( $_POST['dynamicMeta_noncename'] ) )
return;
if ( !wp_verify_nonce( $_POST['dynamicMeta_noncename'], plugin_basename( __FILE__ ) ) )
return;
// OK, we're authenticated: we need to find and save the data
$songs = $_POST['songs'];
update_post_meta($post_id,'songs',$songs);
}

لینک به ارسال


<?php if (get_post_meta($post->ID, 'songs')) {
echo get_post_meta($post->ID, 'songs', true);
} ?>

چیزی که چاپ کردن این بود : Array

کد من به گونه ای هست که با هر بار اضافه کردن میشه همون متاباکس و تکرار کنه و پر کنیم . فکر کنم یه خورده فرق کنه با حالت عادی

ویرایش شده توسط HamedPC
لینک به ارسال


<?php if (get_post_meta($post->ID, 'songs')) {
$songs = get_post_meta($post->ID, 'songs', false);
$songs[0] = $songs;
} ?>

و بعد باید نام متا کی هر نوبت را بدونید و داخل [] بگذارید البته این کدهای شما اینکار را نمی کنند و صرفا متا ولوهای متعدد ذخیره می کنند :


<?php if (get_post_meta($post->ID, 'songs')) {
$songs = get_post_meta($post->ID, 'songs', false);
$songs[0] = $songs;
for($x=0; $x<10; $x++) {
echo $songs[$x]."<br>\n";
}
}

?>

لینک به ارسال
  • 2 هفته بعد...

الان نزدیک 1.5 ماهه که من دنبال یه متاباکس هستم به این صورت. حالا یا فریم ورک یا کدنویسی از اول که بتونم یه متاباکس بسازم که به صورت نامحدود بشه باکس اضافه کرد و نه یه باکس . مثلا تو هر سری سه یا به فرض چهار تا باکس اضافه بشه . و تو قالب هم تو حلقه بذاریم کد متاباکس رو نمایش بده .

ممنون میشم اگه کسی بلده پاسخ بده .

لینک به ارسال

نا محدود که وجود نداره ولی برای اینکه فیلدهای متعدد به یه متاباکس اضافه کنید کافیه یک فیلد هیدن هم به کدهاتون اضافه کنید تا همیشه شماره آخرین فیلد را ذخیره کنه مقدذار اولیه اش را بگذارید صفر و با جی کوئری برای کلید ادتون تعریف کنید

مثال فرض می کنیم که کلاس کلید اضافه کردن فیلد addButton باشه آی دی و نام فیلد هیدنتون songs_number و کلاس کل متاباکستون myMetaBox این کد میشه کد جی کوئریتون


$(document).ready(function() {
$(".addButton").click(function() {
var fn = $("#songs_number").val();
var newfn = parseInt(fn)+1;
var f_name = 'SONGS[song_number-'+newfn+']';
var new_input = '<input name="'+f_name+'">';
$(new_input).appendTo(".myMetaBox");
$("#songs_number").val(newfn);
});
});

و این هم کد احضارتون


<?php
if (get_post_meta($post->ID, 'songs')) {
$songs_number = get_post_meta($post->ID, 'songs_number', true);
if($songs_number>0) {
$songs = get_post_meta($post->ID, 'songs', false);
$songs[0] = $songs;
for($x =0 , $x < $songs_number, ++$x) {
$song = 'songs_number-'.$x;
if(!empty($songs[$song])) {
echo $songs[$song];
}
}
}
else {
$songs = get_post_meta($post->ID, 'songs', true);
echo $songs;
}
}
?>

توضیح مهم: کاری که می خواهید بکنید نیازمند دانش برنامه نویسی نسبی است اگر این دانش را داشته باشید با این راهنمایی کارتون انجام می شه و الا پیشنهاد می کنم که در بخش خرید تایپیک بزنید تا یک برنامه نویس براتون انجام بده چون کوچکترین ایراد کدنویسی ارور بر می گردونه و سر در گمتون می کنه

لینک به ارسال

در کد یه اشتباه شده


$song = 'song_number-'.$x;

اشتباها


$song = 'songs_number-'.$x;

نوشته شده اصلاحش کنید که به مشکل نخورید

لینک به ارسال
  • 9 ماه بعد...

ببخشید مقدار اینو چگونه چاپ کنیم؟


// Adding the metaboxes
// Adding the metaboxes
add_action( 'add_meta_boxes', 'add_employee_meta' );
/* Saving the data */
add_action( 'save_post', 'employee_meta_save' );
/* Adding the main meta box container to the post editor screen */
function add_employee_meta() {
add_meta_box(
'employee-details',
'Employee Details',
'employee_details_init',
'post');
}
/*Printing the box content */
function employee_details_init() {
global $post;
// Use nonce for verification
wp_nonce_field( plugin_basename( __FILE__ ), 'employee_nonce' );
?>
<div id="employee_meta_item">
<?php
//Obtaining the linked employeedetails meta values
$employeeDetails = get_post_meta($post->ID,'employeeDetails',true);
$c = 0;
if ( count( $employeeDetails ) > 0 && is_array($employeeDetails)) {
foreach( $employeeDetails as $employeeDetail ) {
if ( isset( $employeeDetail['name'] ) || isset( $employeeDetail['bio'] ) ) {
printf( '<p>Name<input type="text" name="employeeDetails[%1$s][name]" value="%2$s" /> Package : <textarea name="employeeDetails[%1$s][bio]" rows="4" cols="50" >%3$s</textarea><a href="#" class="remove-package">%4$s</a></p>', $c, $employeeDetail['name'], $employeeDetail['bio'], 'Remove' );
$c = $c +1;
}
}
}
?>
<span id="output-package"></span>
<a href="#" class="add_package"><?php _e('Add Employee Details'); ?></a>
<script>
var $ =jQuery.noConflict();
$(document).ready(function() {
var count = <?php echo $c; ?>;
$(".add_package").click(function() {
count = count + 1;
$('#output-package').append('<p> Name <input type="text" name="employeeDetails['+count+'][name]" value="" /> bio : <textarea name="employeeDetails['+count+'][bio]" rows="4" cols="50" ></textarea><a href="#" class="remove-package"><?php echo "Remove"; ?></a></p>' );
return false;
});
$(document.body).on('click','.remove-package',function() {
$(this).parent().remove();
});
});
</script>
</div><?php
}
/* Save function for the entered data */
function employee_meta_save( $post_id ) {
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
return;
// Verifying the nonce
if ( !isset( $_POST['employee_nonce'] ) )
return;
if ( !wp_verify_nonce( $_POST['employee_nonce'], plugin_basename( __FILE__ ) ) )
return;
// Updating the employeeDetails meta data
$employeeDetails = $_POST['employeeDetails'];
update_post_meta($post_id,'employeeDetails',$employeeDetails);
}

لینک به ارسال

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...