Override functie parent in child

Salut.

Incerc sa editez cateva fisiere din template-ul unei theme wordpress.
Am facut un folder thema-child, si am adaugat fisierele pe care vreau sa le editez, dar thema le foloseste tot pe cele din parent.

in thema-parent/functions.php avem

function et_setup_theme() {
	global $themename, $shortname, $et_store_options_in_one_row, $default_colorscheme;
	$themename = 'Divi';
	$shortname = 'divi';
	$et_store_options_in_one_row = true;
	$default_colorscheme = "Default";
	$template_directory = get_template_directory();
	require_once( $template_directory . '/core/init.php' );
	et_core_setup( get_template_directory_uri() );
	if ( '3.0.61' === ET_CORE_VERSION ) {
		require_once $template_directory . '/core/functions.php';
		require_once $template_directory . '/core/components/init.php';
		et_core_patch_core_3061();
	}
	require_once( $template_directory . '/epanel/custom_functions.php' );
	require_once( $template_directory . '/includes/functions/choices.php' );
	require_once( $template_directory . '/includes/functions/sanitization.php' );

///[++alte chestii]
}
add_action( 'after_setup_theme', 'et_setup_theme' );

Chiar daca e setata thema child sau parent , get_template_directory() o sa fie din thema parent; banuiesc ca aici e problema.

Cum as putea face un override la get_template_directory() sau et_setup_theme() in theme-child/functions.php ?

add_filter( 'template_directory', function($template_dir, $template, $theme_root) {

  return $template_dir;
}, 10, 3 );

Cel mai probabil vei da în alte probleme, deci nu e chiar calea pe care aș merge eu.

Fix funcția aia nu o poți suprascrie DAR o poți înlocui:

  1. remove_action( 'after_setup_theme', 'et_setup_theme' );
  2. add_action('after_setup_theme', 'functia_ta');
1 Like

Asta am folosit si la prima vedere , pare ok.
poate mai vine cineva cu o solutie

Dacă funcția ta arată ca aici, nu cred că e o idee bună să faci treaba asta :slight_smile:

Mai devreme sau mai târziu o să ajungă să te bântuie artificiul ăsta și nici nu o să știi unde să cauți :smiley:

La o primă strigare, uite un exemplu de ceva ce nu o să mai meargă:

Dacă ai Woo Commerce, o să ai și acolo o grămadă de probleme :slight_smile:

Poți spune ce încerci să faci? Poate că există totuși o metodă mai bună pentru asta.

Pe scurt, vreau sa modific html-ul de aici

În versiunile mai noi de Divi (sper că ai o versiune mai nouă de cinci ani :smiley: ) fișierul ăla este încărcat din includes/builder/module/Comments.php:

add_filter( 'comments_template', array( $this, 'et_pb_comments_template' ) );

Teoretic, ar trebui să poți suprascrie filtrul ăsta în functions.php din child:

add_filter( 'comments_template', function($tpl) {
  return STYLESHEETPATH . 'my-comments-template.php';
}, 10);

Practic… s-ar putea să fie nevoie să sapi un pic în Divi să înțelegi flow-ul.

1 Like

Multumesc Ionut :slight_smile: @iamntz
A mers!

remove_filter( 'comments_template','et_pb_comments_template' ,10 );
add_filter( 'comments_template', function($tpl) {
  return  STYLESHEETPATH . '/comments_template.php';	
}, 20);
1 Like