Multiple Sidebar dan Post Slug


Status
Not open for further replies.

Fadli

Poster 2.0
mohon bantuannya lagi ya.

saya mau buat sidebar dengan skenario sebagai berikut:
Halaman Home -> Sidebar 1
Page About -> Sidebar 2 (isinya link subpages dari halaman About)
- Page About Me (subpage dari About) -> Sidebar 2
- Page About My School (subpage dari About) -> Sidebar 2
Page Album -> Sidebar 3 (isinya link subpages dari halaman Album)
- Page Travel (subpage dari Album) -> Sidebar 3

Nah, saya sudah buat untuk di sidebarnya pake kode ini:
Code:
<?php
$children = wp_list_pages('title_li=&child_of='.$post->ID.'&echo=0');
if ($children) { ?>
    <ul>
        <?php echo $children; ?>
    </ul>
<?php } ?>

cuma masalahnya sidebar itu hanya bisa dipakai di Page saja karena yang punya subpage (child) hanya halaman Page saja sehingga kalau misalnya saya tampilkan di halaman About Me maka sidebar itu tidak akan muncul. Solusinya saya ganti .$post->ID. dengan ID halaman wordpress tersebut secara direct, misalnya 4. Nah sidebar ini akan muncul di halaman About dan seluruh subpagenya. Tapi sekali lagi tidak akan muncul di halaman Album beserta subpagenya.

Apakah tidak ada cara lain supaya saya tidak perlu membuat banyak sidebar dan template Page untuk menampilkan sidebar yang berbeda-beda tersebut di seluruh halaman Page maupun subpage? Mohon petunjuknya.

Dan satu lagi, kalau kode .$post->ID. untuk mengambil ID halaman wordpress, kode apa yang digunakan untuk mengambil post-slugnya? jadi kalau halaman itu bernama hxxp://websiteku.com/2009/12/10/about/ nah saya mau ambil post-slug yang berwarna merah itu. bagaimana kodenya?

terima kasih banyak atas bantuannya! :)
 

dpnux

Expert 1.0
Wordpress yah Untuk mendapatkan slug untuk page yang aktif bisa menggunakan $post->post_name

Saya kurang paham dengan tujuannya jadi asumsi pada saat tidak ada child page maka tidak akan muncul. Begitu bukan mas? kalau begitu kita bisa check menggunakan $post->parent_page

PHP:
if(!$post->post_parent) 
{
 $children = wp_list_pages('title_li=&child_of='.$post->ID.'&echo=0');
 if ($children)  echo '<ul>'.$children.'</ul>';
}

Jadi akan mengecek apakah dia punya parent atau tidak, kalau iya, maka tidak akan dieksekusi. Saya belum mencoba codenya.
 

Fadli

Poster 2.0
@dpnux
iya mas, saya kan buat satu halaman dengan sub-halaman, misal seperti ini:
Code:
Home - About - Download
                  |
               Software - Ebook - Article

nah, saya mau tampilkan list link sub-pagenya itu di sidebar. kalau saya pake kode yg saya punya diatas itu link list-nya cuma bisa tampil kalau saya buka di halaman Download saja. sedangkan kalau saya buka halaman Software/Ebook/Article itu tidak mau tampil. saya coba dulu kode dari masnya ya. thx

@imedia
ok, saya coba juga dulu ya. thx
 

Fadli

Poster 2.0
Alhamdulillah.. akhirnya bisa juga :)

kode yang saya pakai seperti ini:
Code:
        } elseif (is_page(array('About','About Me','About My School'))) {
			$children = wp_list_pages('sort_column=menu_order&title_li=&child_of=4&echo=0');
			echo "<div class=\"sidebar about\">";
			echo "<h2><span>About</span></h2>";
			echo "<div class=\"sidebar-content\">";
			echo "<ul>" . $children ."</ul>";
			echo "</div>";
			echo "<div class=\"sidebar-bottom\"></div>";
			echo "</div>";
        } elseif (is_page(array('Download','Download E-book','Download Article','Download Tutorial'))) {
			$children = wp_list_pages('sort_column=menu_order&title_li=&child_of=6&echo=0');
			echo "<div class=\"sidebar download\">";
			echo "<h2><span>Download</span></h2>";
			echo "<div class=\"sidebar-content\">";
			echo "<ul>" . $children ."</ul>";
			echo "</div>";
			echo "<div class=\"sidebar-bottom\"></div>";
			echo "</div>";

tapi rasanya terlalu panjang kalau setiap halaman harus saya setting seperti itu. ada yang punya masukan untuk lebih mempersingkat lagi scriptnya? terima kasih sebelumnya :)
 

Fadli

Poster 2.0
oh ya, satu lagi, saya juga mau jadikan beberapa bagian dari kode saya ini (file page.php) seperti conditional tag diatas. jadi nanti hanya halaman yang saya tentukan saja yang akan memunculkan bagian tersebut. bagian yang dimaksud adalah yang dimulai dari <?php $thumbnails ... sampai ...strtolower($bottomcaption); ?></span></p></div>

ini kode selengkapnya:
Code:
<?php get_header(); ?>

	<div id="main">
	<?php if (have_posts()) : while (have_posts()) : the_post(); ?>

			<div class="content">
				<?php $thumbnails = get_post_meta($post->ID,'thumbnails', true); ?>
				<?php $align = get_post_meta($post->ID,'align', true); ?>
				<?php $bottom = get_post_meta($post->ID,'bottom', true); ?>
				<div class="align-<?php echo strtolower($align); ?>">
					<img src="<?php bloginfo('template_url'); ?>/images/content/<?php echo strtolower($thumbnails); ?>.jpg" />
					<p><?php echo strtolower($thumbnails); ?><br /><span class="bottom"><?php echo strtolower($bottom); ?></span></p>
				</div>

				<?php the_content(); ?>
				
	<?php endwhile; else: ?>
		
				<div class="pagetitle">
					<h2>Page Not Found</h2>
				</div>
				<div class="errormsg">
					<p>Sorry, page not found.</p>
				</div>
			<?php endif; ?>
			</div>

<?php get_sidebar(); ?>

<?php get_footer(); ?>

bagaimana ya caranya? Trims!
 

dpnux

Expert 1.0
Gue kira loe mau ngecek tipe post (wordpress ada dua tipe informasi, post ama page, terminologi mereka). Kalau begitu bisa pakai cara "filtering" yang loe udah buat, mas. Tetep pake is_page untuk ngecek apakah judulnya sama :).

Bisa juga pakai fitur options kalau mau coba sih, jadi kita susupi data pada suatu page / post kemudian dicek pada saat pemanggilan page.php.
 

Fadli

Poster 2.0
ic... jadi memang cuma itu ya caranya...

tapi bisa bantu ga mas, kalau-kalau script saya diatas itu masih bisa di kompress lagi :D
 
Status
Not open for further replies.

Top