با سلام و خسته نباشید.
استاد در دوره تاکید داشتند که حتما بعد از مقدار دهی پراپرتیها در متد construct کلاس فرزند، متد Construct والد کال شود(حتما در انتها).
اما مشکلی که پیش میاد این است پراپرتیهایی که مقدار دیفالت براشون توی کلاس والد تعریف کردیم override نمیشن چون==> ما اول پراپرتی را توی متد سازنده فرزند، مقدار دهی میکنیم و بعد مقدار دیفالتی که توی والد مقداردهی کردیم را کال میکنیم که در نهایت مقدار دیفالت ست میشه.(کدهای زیر)
حالا سوالم از استاد این هستش:
۱. آیا به مشکل برمیخوریم اگر ابتدای متد construct فرزند، متد construct والد را کال کنیم ؟ (در این صورت مشکل override شدن حل میشود.)
۲. در صورتی که به مشکل میخوریم، چه راهکاری برای موضوع override نشدن مقداری که تعیین میکنیم با مقدار دیفالت وجود دارد؟
- متد construct در کلاس والد (کلاس بیس)
public function __construct()
{
// Properties that have not been initialized: $labels, $rewrite, $description, $post_type_key
// Properties that have been initialized already
$this->public = true;
$this->publicly_queryable = true;
$this->show_ui = true;
$this->show_in_menu = true;
$this->query_var = true;
$this->capability_type = 'post';
$this->has_archive = true;
$this->hierarchical = true;
$this->menu_position = null;
$this->supports = ['title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments'];
$this->show_in_rest = false;
$this->taxonomies = ['category', 'post_tag'];
// Hook into the 'init' action to register the custom post type
add_action('init', [$this, 'register_custom_post_type']);
}
- متد construct در کلاس فرزند:
من اینجا پراپرتی $this->taxonomies مقدار دهی کردم ولی override نشد و کاماکان مقدار دیفالتش که دوتا تاگزونومی داشت را خوند.
public function __construct()
{
// Set specific values for the book custom post type
$this->post_type_key = 'book';
$this->description = 'Book custom post type.';
$this->rewrite = ['slug' => 'book'];
$this->taxonomies = ['post_tag'];
// Set labels for the book custom post type
$this->labels =[...];
// Call the parent class constructor
parent::__construct();
}
- وقتی construct رو بالای پراپرتیها کال کردم مشکل برطرف و اجرا شد.
public function __construct()
{
// Call the parent class constructor
parent::__construct();
// Set specific values for the book custom post type
$this->post_type_key = 'book';
$this->description = 'Book custom post type.';
$this->rewrite = ['slug' => 'book'];
$this->taxonomies = ['post_tag'];
// Set labels for the book custom post type
$this->labels =[...];
}