Я создал рабочую вкладку пользовательской страницы (меню), используя все соответствующие функции, действия / фильтры, которые я настроил, и она работает как задумано, и теперь я хочу добавить дополнительные дочерние / подстраницы в настройку процесса как https://www.website.com/myaccount/books/
включить https://www.website.com/myaccount/books/create/
и /modify/abc123/
.
Очевидно, что это интерфейсная функция, и я прошу помощи сообщества SE, чтобы найти лучший способ продолжить.
my-account-books. php
global $current_user;
$query_var = get_query_var( 'books' );
if ( !empty ( $query_var ) ) {
if ( $query_var == 'create' ) {
var_dump( $query_var ); // Returns: string(6) "create"
// Output Code
}
if ( $query_var == 'modify' ) {
var_dump( $query_var ); // Returns: string(6) "modify"
// Output Code
}
if ( $query_var == 'modify/' . <<this value>> ) {
// Output Code
}
elseif ( empty ( $query_vars ) ) {
/* The below code works, I just added it to show the process.
I want to use the identical code in standalone /modify/.
I was thinking about using get_template_path('partials/books');
*/
$args = array (
'post_type' => '1234_books',
'post_status' => array( 'publish', 'pending' ),
'author' => $current_user->ID,
'order' => 'ASC'
);
$query = new WP_Query( $args );
if( $query->have_posts() ) :
while ( $query->have_posts() ) : $query->the_post();
/* Code has been removed to simplify post and
not relevant to this enquiry */
if ( has_post_thumbnail() ) {
the_post_thumbnail ( array( 150, 150 ) );
}
else {
// Placeholder (300 x 300)
}
endwhile;
endif;
}
Бит, с которым у меня возникают проблемы, - это, например, разделение query_var внутри URL, если адрес .../modify/abc123/
результат query_var string(13) modify/abc123"
, и мне нужно извлечь abc123
. Будет ли использование explode( '/' $query_var )
лучшим вариантом в этом сценарии? А затем выполните $mod_query = new WP_Query...
, чтобы извлечь 'abc123' из query_var и затем отобразить l oop на основе возвращенной информации, или есть другой способ, которым я могу добиться этого? Кроме того, является ли предоставленный код наиболее эффективным способом выполнения этой задачи в целом?
Спасибо.
== ОБНОВЛЕНИЕ ==
Я закончил тем, что использовал это для кода, и это работает, но это лучший способ выполнить эту конкретную задачу?
$query_var = get_query_var( 'books' );
$book_id = explode( '/', $query_var );
if ( empty ( $book_id[0] ) || ( !isset ( $book_id[0] ) ) ) :
echo 'Book Dashboard';
// Code Goes Here
elseif ( !empty ( $book_id[0] ) && ( $book_id[0] == 'add' ) ) :
echo 'Add Book';
// Code Goes Here.
elseif ( !empty ( $book_id[0] ) && ( $book_id[0] == 'modify' ) ) :
if ( !isset ( $book_id[1] ) ) :
echo 'Modify Book. No ID Provided';
// Code Goes Here.
elseif ( isset ( $pet_id[1] ) ) :
echo 'Modify Book. Book ID: ' . $book_id[1];
// Code Goes Here.
endif;
elseif ( !empty ( $book_id[0] ) && ( $book_id[0] == 'remove' ) ) :
echo 'Remove Book';
// Code Goes Here.
endif;