رفتن به مطلب

استفاده از checkbox به جای لیست در انتخاب دسته ها در تنظیمات قالب


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

سلام. تو تنظیمات قالب من یه بخش می خوام بزارم که کاربر برای نمایش مطالب سایتش در بلاک های متفاوت دسته ها رو مطابق با میل خودش انتخاب کنه.

حالا من کدهای زیر رو برای انتخاب دسته ها در نظر گرفتم.


$categories = get_categories('hide_empty=0&orderby=name');
$wp_cats = array();
foreach ($categories as $category_list ) {
$wp_cats[$category_list->cat_ID] = $category_list->cat_name;
}
array_unshift($wp_cats, "Choose a category");

--------------------------------------------------------------
array( "name" => "Homepage featured category",
"desc" => "Choose a category from which featured posts are drawn",
"id" => $shortname."_feat_cat",
"type" => "select",
"options" => $wp_cats,
"std" => "Choose a category"),
--------------------------------------------------------------
<?php
break;

case 'select':
?>

<div class="rm_input rm_select">
<label for="<?php echo $value['id']; ?>"><?php echo $value['name']; ?></label>

<select name="<?php echo $value['id']; ?>" id="<?php echo $value['id']; ?>">
<?php foreach ($value['options'] as $option) { ?>
<option <?php if (get_settings( $value['id'] ) == $option) { echo 'selected="selected"'; } ?>><?php echo $option; ?></option><?php } ?>
</select>

<small><?php echo $value['desc']; ?></small><div class="clearfix"></div>
</div>

این کدها لیست موضوعات رو به نمایش می ذارن و کاربر قادر هست تنها یک موضوع رو انتخاب کنه.من اینو به چک باکس بخوام تبدیل کنم باید چیکار کنم؟! اگه دوستان می تونن یه راهنمایی بکنن.

لینک به ارسال

تست کنید


<?php
$opt = get_settings( $value['id'] );
foreach ($value['options'] as $k=>$v) { ?>
<label><input type="checkbox" name="<?php echo $value['id']; ?>[]" value="<?php echo $k; ?>" <?php echo (in_array($k,$opt) ? "checked" : "") ?><?php echo $v ?></label>
<?php } ?>

لینک به ارسال
ارسال شده در (ویرایش شده)

نمی شه خطا می ده!

یه سوال دیگه : حالا فرض کنیم موضوعات به همون صورت لیست باشه و کاربر مثلا دسته ی سرگرمی رو انتخاب کرده و تنظیمات رو سیو می کنه.حالا من با چه کدی باید این دسته ی سیو شده رو تو قالب فراخوانی کنم؟ می خوام کوئری آخرین مطالب بذارم و کاربر با اون دسته ای که تو تنظیمات انتخاب کرده آخرین مطالب نمایش داده بشه.حالا اینو چه جوری باید تو کوئری فراخونی کنم؟

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

شما دسته ها رو مثلا با تابع wp_dropdown_categories لیست کردید

بعد خروجی این تابع که یک دراپ دان لیست هست رو از فرم می گیرید که میشه آی دی هر دسته

بعد آی دی دسته رو اگر در آپشن ذخیره می کنید میتونید با get_option بگیرید و بعد در کوئری قراربدید

لینک به ارسال
ارسال شده در (ویرایش شده)

این ساختار کلی تنظیمات که فقط دسته ها رو نشون می ده و سیو می کنه :


<?php
wp_enqueue_style('mytheme',get_bloginfo('template_directory').'/option/admin.css');
$themename = "download";
$shortname = "download";

$categories = get_categories('hide_empty=0&orderby=name');
$wp_cats = array();
foreach ($categories as $category_list ) {
$wp_cats[$category_list->cat_id] = $category_list->cat_name;
}

foreach ($categories as $category_list ) {
$wp_cats[$category_list->cat_ID] = $category_list->cat_name;
}
array_unshift($wp_cats, "Choose a category");

function get_theme_option($option)
{
global $shortname;
return stripslashes(get_option($shortname . '_' . $option));
}
function get_theme_settings($option)
{
return stripslashes(get_option($option));
}
$options = array (

array( "type" => "open"),

array( "name" => "Pick Categories",
"desc" => "Choose a category from the list to do some interesting stuff.",
"id" => $shortname."_categories",
"cid" => $wp_ids,
"type" => "select",
"options" => $wp_cats,
"std" => ""),


array( "type" => "close")

);
function mytheme_add_admin() {
global $themename, $shortname, $options;

if ( $_GET['page'] == basename(__FILE__) ) {

if ( 'save' == $_REQUEST['action'] ) {
foreach ($options as $value) {
update_option( $value['id'], $_REQUEST[ $value['id'] ] ); }
foreach ($options as $value) {
if( isset( $_REQUEST[ $value['id'] ] ) ) { update_option( $value['id'], $_REQUEST[ $value['id'] ] ); } else { delete_option( $value['id'] ); } }
echo '<meta http-equiv="refresh" content="0;url=themes.php?page=option.php&saved=true">';
die;
} else if( 'reset' == $_REQUEST['action'] ) {
foreach ($options as $value) {
delete_option( $value['id'] ); }
header("Location: admin.php?page=option.php&reset=true");
die;
} else if ( 'reset_widgets' == $_REQUEST['action'] ) {
$null = null;
update_option('sidebars_widgets',$null);
header("Location: admin.php?page=option.php&reset=true");
die;
}
}
add_theme_page(" تنطیمات اختصاصی ", " تنطیمات اختصاصی ", 'edit_themes', basename(__FILE__), 'mytheme_admin');
}
function mytheme_admin_init() {
global $themename, $shortname, $options;

$get_theme_options = get_option($shortname . '_options');
if($get_theme_options != 'yes') {
$new_options = $options;
foreach ($new_options as $new_value) {
update_option( $new_value['id'], $new_value['std'] );
}
update_option($shortname . '_options', 'yes');
}
}
if(!function_exists('get_sidebars')) {
function get_sidebars()
{
check_theme_header();
get_sidebar();
}
}
function mytheme_admin() {
global $themename, $shortname, $options;
if ( $_REQUEST['saved'] ) echo '<div align="center"><div id="message">تنظیمات قالب شما ذخیره شد.</div></div>';
if ( $_REQUEST['reset'] ) echo '<div align="center"><div id="message">.تنظیمات قالب شما به حالت اولیه بازگردانده شد.</div></div>';

?>

<div align="center">
<div id="page">
<div id="header">
<div id="adlogo"></div>
</div>
<br/>
<code>لطفا تمامی لینک ها را با http:// وارد کنید</code><br/>
<form method="post">
<?php foreach ($options as $value) {

switch ( $value['type'] ) {
case "open":
?>
<?php
break;

case 'select':
?>
<tr>
<td width="20%" rowspan="2" valign="middle"><strong><?php echo $value['name']; ?></strong></td>
<td width="80%"><select style="width:240px;" name="<?php echo $value['id']; ?>" id="<?php echo $value['id']; ?>">
<?php
$categories = get_categories('hide_empty=0&orderby=name');
foreach ($categories as $category_list ) {
?>
<option value="<?php echo $category_list->cat_ID; ?>" <?php if ( get_settings( $value['id'] ) == $category_list->cat_name) { echo ' selected="selected"'; } elseif ($category_list->cat_name == $value['std']) { echo ' selected="selected"'; } ?>><?php echo $category_list->cat_name; ?></option>
<?php } ?>
</select></td>
</tr>
<?php
}
}
?>
</div>
</div>
<div align="center">
<div style="float:right;padding-right:520px">
<input id="b1" name="save" type="submit" value="Save" />
<input type="hidden" name="action" value="save" />
</form>
</div>
<div style="float:right">
<form method="post" action="">
<input id="b2" name="reset" type="submit" value="Reset" />
<input type="hidden" name="action" value="reset" />
</form>
</div>
</div>
<?php
}
mytheme_admin_init();
function check_theme_header() { if (!(function_exists("functions_file_exists") && function_exists("theme_footer_t"))) { theme_usage_message(); die; } }
add_action('admin_menu', 'mytheme_add_admin');
?>

بعد از انتخاب یک دسته با کد زیر نام دسته رو در قالب نمایش می دم :


<?php echo $download_categories; ?>

تا اینجا مشکلی نیست.حالا من اومدم برای یه بلاک سایت این می خوام که کاربر با انتخاب دسته در تنظیمات , کوئری آخرین مطلب دلخواه خودشو نشون بده . من کدهای زیر رو امتحان کردم اما خطا می ده :


<?php query_posts('showposts=10&cat=<?php echo get_theme_option("download_categories"); ?>); ?>
<?php while (have_posts()) : the_post(); ?>
<li><a href="<?php the_permalink() ?>" title="<?php the_title(); ?>" class="mostread"><?php the_title(); ?></a></li>
<?php endwhile; ?>
یا
<?php query_posts('showposts=10&cat=$wp_ids); ?>
<?php while (have_posts()) : the_post(); ?>
<li><a href="<?php the_permalink() ?>" title="<?php the_title(); ?>" class="mostread"><?php the_title(); ?></a></li>
<?php endwhile; ?>
یا
<?php query_posts('showposts=10&cat=$wp_cats; ?>
<?php while (have_posts()) : the_post(); ?>
<li><a href="<?php the_permalink() ?>" title="<?php the_title(); ?>" class="mostread"><?php the_title(); ?></a></li>
<?php endwhile; ?>
و
......

خطا می ده یا کلا دسته رو در کوئری در نظر نمی گیره و فقط 10 پست آخر سایتو نشون می ده.می شه راهنمایی کنید.این کد رو چطوری تبدیل کنم؟!

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

چه خطایی در کد ابتدایی هست؟

بهتره برای این کار نوع جدیدی تعریف و از آن استفاده کنید


case 'select2':

لینک به ارسال

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

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

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

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

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

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

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

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

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