Tôi đang phát triển một plugin không sử dụng loại bài đăng tùy chỉnh, nhưng các bảng cơ sở dữ liệu riêng biệt. Đây là một plugin hiển thị danh sách các khóa học với các liên kết dẫn đến các trang chi tiết khóa học khác nhau, nơi người dùng sau đó có thể đăng ký một khóa học.
Ở trạng thái hiện tại, tôi đang sử dụng một mã ngắn để đưa dữ liệu bổ trợ vào một trang có mẫu trang tùy chỉnh (page-khóa.php).
Bây giờ tôi muốn thay đổi linh hoạt the_title()
, theo trang mà plugin hiển thị (danh sách các khóa học, trang chi tiết khóa học với các biểu mẫu, trang gửi biểu mẫu thành công). Nhưng bất cứ khi nào tôi làm điều đó với bộ lọc sau, các liên kết đến các trang khác trong phần chân trang cũng thay đổi:
<?php
add_filter('the_title', 'custom_page_title');
function custom_page_title() {
return 'Custom Title';
}
Biên tập
Trong phần chân trang.php tôi có một hàm bao gồm các liên kết chân trang wp_nav_menu()
để tôi có thể định nghĩa chúng trong Giao diện> Menu. Nhưng với bộ lọc ở trên, tất cả các liên kết trong phần chân trang cũng thay đổi thành Title Tiêu đề tùy chỉnh '. Nhưng tôi chỉ muốn thay đổi tiêu đề của trang, không ảnh hưởng đến các liên kết menu trong phần chân trang.
Cố gắng thêm thẻ có điều kiện, in_the_loop()
các liên kết chân trang vẫn bị ảnh hưởng, mặc dù chúng không nằm trong vòng lặp.
<?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';
}
Nó tương tự như câu hỏi này: lọc vấn đề về tiêu đề trong điều hướng , chỉ là các liên kết bị ảnh hưởng nằm ở chân trang và in_the_loop()
không hoạt động.
Làm cách nào tôi có thể thay đổi the_title()
trong khi chỉ ảnh hưởng đến tiêu đề của trang hiện tại được hiển thị không ảnh hưởng đến các liên kết trong chân trang ?
Chỉnh sửa 2 - Giải pháp
Vì vậy, cuối cùng tôi đã làm cho nó hoạt động:
<?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;
}
Trang tệp-listcifts.php là Mẫu bài đăng tùy chỉnh mà tôi đã gán cho trang tĩnh có tên 'Khóa học'.
Tôi cho rằng nó không hoạt động trước đây vì tên của trang tĩnh và tên tệp của Mẫu bài tùy chỉnh giống nhau.
in_the_loop()
được đặt thành true
bất cứ khi nào the_post()
bị sa thải. Không đào sâu vào cốt lõi và biết rằng các menu điều hướng là các vòng lặp , tôi đoán rằng ở đâu đó trên đường đi, wp_nav_menu()
tạo ra một vòng lặp, gây ra in_the_loop()
trở lại true
.