Pracuję nad motywem potomnym. Zdecydowanie wolę nie zastępować głównych plików szablonów, aby zachować prostotę motywu potomnego, a także zminimalizować ilość kodu i konserwacji w czasie.
W pętli szablon index.php w kompozycji nadrzędnej używa:
get_template_part( 'content' );
który przyniesie content.php , chcę, aby zachowywał się podobnie get_template_part( 'content', get_post_format() );
lub podobnie w celu wprowadzenia różnych szablonów, takich jak content-aside.php itp., bez tworzenia index.php w motywie potomnym w celu zastąpienia rodzic dla zmiany w jednej linii.
get_template_part()
składa się z:
function get_template_part( $slug, $name = null ) {
do_action( "get_template_part_{$slug}", $slug, $name );
$templates = array();
$name = (string) $name;
if ( '' !== $name )
$templates[] = "{$slug}-{$name}.php";
$templates[] = "{$slug}.php";
locate_template($templates, true, false);
}
Więc dostępna jest akcja, w moim przypadku o nazwie get_template_part_content
Mogę dołączyć do akcji za pomocą:
add_action( 'get_template_part_content', 'child_post_styles', 10, 2 );
function child_post_styles ( $slug, $name ) {
if( false == $name ){
$name = get_post_format();
$templates = array();
if ( '' !== $name )
$templates[] = "{$slug}-{$name}.php";
$templates[] = "{$slug}.php";
locate_template($templates, true, false);
}
}
Powoduje to oczywiście duplikację po, jedną z mojej funkcji przechwyconej, która może wyświetlić żądany szablon, a drugą ze zwykłego locate_template
wywołania wget_template_part()
Mam problem ze znalezieniem sposobu na osiągnięcie tego bez powielania lub bez renderowania strony końcowej zaraz po udostępnieniu części szablonu przez zrobienie czegoś głupiego, takiego jak a break
lubexit
źródło
Odpowiedzi:
Nie ma do tego haczyka. Skopiuj plik index.php do motywu podrzędnego i wprowadź zmiany w jednej linii. Powiedz także autorowi motywu nadrzędnego, że powinien wprowadzić taką samą zmianę w motywie, aby uzyskać elastyczność.
źródło
ob_start
w nim iob_end
przy późniejszym haku, aby został wykonany, ale nigdy nie powtórzył echa, co zwykle jest wystarczające. Lub możesz użyć exit (), aby wymusić zakończenie PHP (po ręcznym dodaniu wszystkiego, czego jeszcze brakuje: stopki itp.)Myślę, że nie jest to dokładnie tak, jak chcesz. Naprawdę denerwujące jest to, że nie ma tam filtra zmieniającego nazwy plików szablonów :(
Mam jednak obejście tego. Użyjmy
content.php
do porównania.Nie użyłem drugiego argumentu
get_template_part
funkcji, raczej przekazałem przyrostek do pierwszego argumentu, aby uniknąć bezokoliczenia wywołańcontent.php
pliku, jeśli nie ma'content-'. $format
pliku.źródło
Cóż, jest ROZWIĄZANIE :
ale zastanów się dobrze, w jakim haku powinieneś wstawić tę akcję ... aby ręcznie uzyskać lokalizację, użyj np
locate_template('content-header.php', false);
źródło
Jeśli chcesz pobrać plik o nazwie content-aside.php, wywołujesz funkcję w następujący sposób:
Drugi parametr to nazwa filtru po łączniku. Jeśli twój plik znajduje się w podkatalogu (templates / content-aside.php):
Czy to właśnie chcesz zrobić?
źródło