Saya sedang mengembangkan plugin yang tidak menggunakan jenis posting khusus, tetapi memisahkan tabel database. Ini adalah plugin yang menampilkan daftar program dengan tautan yang mengarah ke halaman detail kursus yang berbeda, di mana pengguna kemudian dapat berlangganan kursus.
Dalam kondisi saat ini, saya menggunakan kode pendek untuk memasukkan data plugin ke halaman dengan templat halaman khusus (page-courses.php).
Saya sekarang ingin mengubah the_title()
secara dinamis, sesuai dengan halaman yang ditampilkan plugin (daftar kursus, halaman rincian kursus dengan formulir, halaman keberhasilan pengiriman formulir). Tetapi setiap kali saya melakukannya dengan filter berikut, tautan ke halaman lain di footer juga berubah:
<?php
add_filter('the_title', 'custom_page_title');
function custom_page_title() {
return 'Custom Title';
}
Edit
Di footer.php saya memiliki fungsi yang menyertakan tautan footer wp_nav_menu()
sehingga saya dapat mendefinisikannya di Appearance> Menus. Tetapi dengan filter di atas, semua tautan di footer juga berubah menjadi 'Judul Kustom'. Tapi saya hanya ingin mengubah judul halaman, tidak mempengaruhi tautan menu di footer.
Mencoba menambahkan tag kondisional in_the_loop()
, tautan footer masih terpengaruh, meskipun tidak ada di loop.
<?php
add_action( 'loop_start', 'set_custom_title' );
function set_custom_title() {
if ( in_the_loop() ) {
add_filter( 'the_title', 'custom_page_title' );
}
}
function custom_page_title() {
return 'Custom Title';
}
Ini mirip dengan pertanyaan ini: filter masalah the_title di nav , hanya saja tautan yang terpengaruh ada di footer dan in_the_loop()
tidak berfungsi.
Bagaimana saya bisa mengubah the_title()
sementara hanya mempengaruhi judul halaman saat ini ditampilkan tidak mempengaruhi tautan di footer ?
Edit 2 - Solusi
Jadi saya akhirnya berhasil:
<?php
add_action( 'loop_start', 'set_custom_title' );
function set_custom_title() {
add_filter( 'the_title', 'wpse83525_filter_the_title', 10, 2 );
}
function wpse83525_filter_the_title( $title, $id ) {
if ( 'page-listcourses.php' == get_post_meta( $id, '_wp_page_template', true ) ) {
return 'Custom Title';
}
return $title;
}
File page-listcourses.php adalah Template Posting Kustom yang saya tetapkan untuk halaman statis bernama 'Kursus'.
Saya berasumsi itu tidak berfungsi sebelumnya karena nama halaman statis dan nama file Template Pos Kustom sama.
sumber
in_the_loop()
diatur ketrue
setiap kalithe_post()
dipecat. Tanpa menggali terlalu dalam ke inti, dan mengetahui bahwa menu nav sendiri loop , saya menduga bahwa di suatu tempat di sepanjang jalan,wp_nav_menu()
instantiates loop, menyebabkanin_the_loop()
untuk kembalitrue
.Jawaban:
Saya akan menggunakan
is_page_template()
syarat:Edit
Anda akan menggunakan persyaratan ini di dalam panggilan balik filter Anda:
Sekarang, untuk mengisolasi hanya judul halaman yang menggunakan template halaman Anda, Anda dapat mengambil keuntungan dari parameter lainnya dilewatkan ke
the_title
:$id
. Karena Anda tahu ID posting yang judulnya difilter, Anda dapat menanyakan_wp_page_template
meta posting, dan memastikan bahwa itu sama dengan templat halaman Anda:Edit 2
Jika Anda ingin menargetkan halaman "Kursus" secara khusus, gunakan
is_page()
dengan siput halaman'courses'
, atau judul halaman'Courses'
:Meskipun demikian, saya akan merekomendasikan perubahan
page-courses.php
menjadi Templat Halaman Kustom , yang akan membuat seluruh proses ini jauh lebih kuat.sumber
get_post_meta( $id, '_wp_page_template', true )
kembalidefault
dan saya tidak tahu apa yang harus dilakukan dengan ini. Ketika saya mengatur 'page-courses.php' ke 'default', semua tautan nav berubah, kecuali ketika saya mengaitkanthe_title
filter keloop_start
, maka hanya tautan footer yang berubah. Saya memeriksa file templat mana yang digunakan, dan itu adalah 'page-courses.php' dan bukan 'page.php' (yang saya pikir mungkin yang default).Jika Anda hanya ingin mengedit judul halaman saat ini, gunakan
in_the_loop()
kondisional, seperti pada:sumber
Coba gunakan tag bersyarat untuk memastikan
the_title()
hanya dimodifikasi pada halaman yang Anda inginkan.sumber
Meskipun
is_page_template()
akan berfungsi, saya lebih suka menempatkan kode semacam ini di templat halaman itu sendiri untuk memiliki semua kode yang menghasilkan halaman semacam ini dalam satu file.sumber
the_title()
? Contoh kode?get_header()
.the_title
adalah solusi yang lebih baik.