web-dev-qa-db-ja.com

Wordpressの子テーマ

親テーマで既に使用されているWordPressの子テーマで関数を再宣言しようとしています。しかし、そうしようとすると、「致命的なエラー:再宣言できません」というメッセージが表示されます。

また、私は運なしで以下を使ってみました:

if (!function_exists('jr_load_scripts')) {
  // do fancy things here...
}

ちょっと見てみたいのであれば、 リンク です。

編集:これが完全なコードです。

if (!function_exists('jr_load_scripts')) {
function jr_load_scripts() {
global $app_abbr;

$http = (is_ssl()) ? 'https' : 'http';

// load google cdn hosted scripts if enabled
if (get_option($app_abbr.'_google_jquery') == 'yes') :

    wp_deregister_script('jquery');
    wp_register_script('jquery', (''.$http.'://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js'), false, '1.4.2');
    wp_register_script('jquery-ui-custom', ''.$http.'://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js', false, '1.8');

else :

    wp_register_script('jquery-ui-custom', get_bloginfo('template_directory').'/includes/js/jquery-ui-1.8.custom.min.js', false, '1.8');

endif;

wp_enqueue_script('jquery');
wp_enqueue_script('jquery-ui-custom');

wp_enqueue_script('jquery-tag', get_bloginfo('template_directory').'/includes/js/jquery.tag.js', array('jquery'), '');
wp_enqueue_script('smoothscroll', get_bloginfo('template_directory').'/includes/js/smoothscroll.js', array('jquery'), '');
wp_enqueue_script('lazyload', get_bloginfo('template_directory').'/includes/js/jquery.lazyload.mini.js', array('jquery'), '1.5.0');
wp_enqueue_script('elastic', get_bloginfo('template_directory').'/includes/js/jquery.elastic.js', array('jquery'), '1.0');
wp_enqueue_script('fancybox', get_bloginfo('template_directory').'/includes/js/jquery.fancybox-1.3.4.pack.js', array('jquery'), '1.3.4');
wp_enqueue_script('qtip', get_bloginfo('template_directory').'/includes/js/jquery.qtip.min.js', array('jquery'), '1.0.0-rc3');
wp_enqueue_script('general', get_bloginfo('template_directory').'/includes/js/theme-scripts.js', array('jquery'), '3.0');

$jr_enable_indeed_feeds = get_option('jr_enable_indeed_feeds');
if ($jr_enable_indeed_feeds=='yes') :

     wp_enqueue_script('indeed-api', ''.$http.'://www.indeed.com/ads/apiresults.js');

endif;
}
1
Riaan Knoetze

やや直観的ではありませんが、WordPressは親のテーマの前に子のテーマコードをロードします。そのため、子テーマのfunction_exists()に何かをラップしても何も起こりません。それを持つ必要があるのは親テーマです。

より良い選択肢は、親のテーマ関数をアンフックし(ロード時に正しく実行されない限り、それはしてはいけません)、あなた自身のものをフックすることです。

0
Rarst