• 解決済 sumida

    (@sumida)


    バージョン:
     wordpress-3.8.1-ja
     wptouch.3.1.5(有効化)
    ブラウザ:
     FireMobileSimulator(iPhone 5)

    上記環境で、他のアプリから
    require_once(HTML_REALDIR.$wp_install_dir.’/wp-load.php’ );
    という形で、wordpressを利用している。

    発生条件が、絞り込めていないのですが、
    wp-load.php -> wp-config.php -> wp-settings.phpの
    do_action( ‘init’ );
    でシステムエラーになっています。

    ログは、
    Fatal error(E_ERROR): Call to a member function set() on a non-object on [/xxxxxxxxxx/htdocs/blog/wp-includes/query.php(74)]
    と表示されます。
    また、wptouchを無効化すると発生しません。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック投稿者 sumida

    (@sumida)

    長文になりますが、追いかけてみました。

    do_action(‘init’);
    にあたり、次の関数が登録されています。
    themes/foundation/root-functions.php:add_action( ‘init’, ‘foundation_signal_module_init’ );

    このfoundation_signal_module_initは、
    themes/foundation/root-functions.phpにあり、
    下記のコードになっています。
    function foundation_signal_module_init() {
    // Themes will tie into this to add theme support
    do_action( ‘foundation_module_init’ );
    do_action( ‘foundation_enqueue_scripts’ );

    if ( wptouch_is_showing_mobile_theme_on_mobile_device() ) {
    この行 do_action( ‘foundation_module_init_mobile’ );
    do_action( ‘foundation_enqueue_scripts_mobile’ );
    do_action( ‘foundation_enqueue_color_scripts’ );
    }
    }

    この行で実行される関数は、
    themes/foundation/modules/featured/featured.php:add_action( ‘foundation_module_init_mobile’, ‘foundation_featured_init’ );

    このfoundation_featured_initは、
    themes/foundation/modules/featured/featured.phpにあり、
    下記のコードになっています。
    function foundation_featured_init() {
    $settings = foundation_get_settings();
    if ( $settings->featured_enabled ) {

    wp_enqueue_script(
    ‘foundation_featured’,
    foundation_get_base_module_url() . ‘/featured/swipe.js’,
    false,
    FOUNDATION_VERSION,
    true
    );

    wp_enqueue_script(
    ‘foundation_featured_init’,
    foundation_get_base_module_url() . ‘/featured/wptouch-swipe.js’,
    ‘foundation_featured’,
    FOUNDATION_VERSION,
    true
    );

    この行 foundation_determine_images();
    }
    }

    この行で実行される関数のコードは、
    function foundation_determine_images() {
    global $foundation_featured_posts;
    global $foundation_featured_data;
    global $post;

    .
    .
    .

    if ( !$new_posts ) {
    この行 $new_posts = new WP_Query( ‘posts_per_page=’ . $args[ ‘max_search’ ] );
    }

    .
    .
    .

    }

    ここで、「posts_per_page=20」を引数として渡しています。
    この行で実行されるコードは、
    wp-includes/query.php
    function __construct($query = ”) {
    if ( ! empty($query) ) {
    この行 $this->query($query);
    }
    }

    function query( $query ) {
    $this->init();
    $this->query = $this->query_vars = wp_parse_args( $query );
    この行 return $this->get_posts();
    }

    ここで、$queryは、「posts_per_page=20」だけであるため、$this->get_posts();が完了できていないことが原因のようです。

    トピック投稿者 sumida

    (@sumida)

    追伸:
    追いかけたコードは、wptouch 3.1.5です。

    結局、以下の部分で引数が内容的に不足しているようです。
    wptouch/themes/foundation/modules/featured/featured.phpにある関数foundation_determine_images()

    if ( !$new_posts ) {
    この行		$new_posts = new WP_Query( 'posts_per_page=' . $args[ 'max_search' ] );
    	}
    トピック投稿者 sumida

    (@sumida)

    表示できるケースも同じようなルートをたどっているようです。

    なので、発生条件については、特定できていません。

    トピック投稿者 sumida

    (@sumida)

    引き続き追いかけています。

    wptouch/themes/foundation/root-functions.phpにある

    function foundation_posts_per_page( $query ) {
    	if ( wptouch_is_showing_mobile_theme_on_mobile_device() && ( $query->is_home() || is_archive() ) ) {
    		$settings = foundation_get_settings();
    ここ		set_query_var( 'posts_per_page', $settings->posts_per_page );
    	}
    }

    「ここ」の部分で、$settings->posts_per_pageが取得できていません。
    本来なら「20」がくるのかな〜。

    いまだ、発生条件不明。

    トピック投稿者 sumida

    (@sumida)

    どうも、手のつけようがないので、諦めて「解決済み」にします。

    なお、下記スレッドに投稿した部分は、なんだか関係があるような・ないような。
    http://ja.forums.wordpress.org/topic/85596?replies=2

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「wptouchを有効にした場合、システムエラーになるケースがある。」には新たに返信することはできません。