对正常循环上的非对象调用成员函数Have_Posts()

时间:2016-02-11 作者:Zed93

<?php
defined( \'ABSPATH\' ) or die( \'No script kiddies please!\' );
define( \'MY_PLUGIN_PATH\', plugin_dir_path( __FILE__ ) );
define( \'MY_PLUGIN_URL\', plugin_dir_url( __FILE__ ) );
register_activation_hook(__FILE__,\'my_plugin_install\');
register_deactivation_hook( __FILE__, \'my_plugin_remove\' );

function my_plugin_install() {
    global $wpdb;
    $the_page_title = \'TEST\';
    $the_page_name = \'test\';
    delete_option("my_plugin_page_title");
    add_option("my_plugin_page_title", $the_page_title, \'\', \'yes\');
    delete_option("my_plugin_page_name");
    add_option("my_plugin_page_name", $the_page_name, \'\', \'yes\');
    delete_option("my_plugin_page_id");
    add_option("my_plugin_page_id", \'0\', \'\', \'yes\');
    $the_page = get_page_by_title( $the_page_title );

    if ( ! $the_page ) {
        $_p = array();
        $_p[\'post_title\'] = $the_page_title;
        $_p[\'post_content\'] = "";
        $_p[\'post_status\'] = \'publish\';
        $_p[\'post_type\'] = \'page\';
        $_p[\'comment_status\'] = \'closed\';
        $_p[\'ping_status\'] = \'closed\';
        $_p[\'post_category\'] = array(1);
        $the_page_id = wp_insert_post( $_p );
    }
    else {
        $the_page_id = $the_page->ID;
        $the_page->post_status = \'publish\';
        $the_page_id = wp_update_post( $the_page );
    }

    delete_option( \'my_plugin_page_id\' );
    add_option( \'my_plugin_page_id\', $the_page_id );
}

function my_plugin_remove() {
    global $wpdb;
    $the_page_title = get_option("my_plugin_page_title");
    $the_page_name = get_option("my_plugin_page_name");
    $the_page_id = get_option(\'my_plugin_page_id\');
    if( $the_page_id ){wp_delete_post( $the_page_id );}
    delete_option("my_plugin_page_title");
    delete_option("my_plugin_page_name");
    delete_option("my_plugin_page_id");
}

function custom_template($template){
    $template = plugin_dir_path( __FILE__ ) . \'my-custom-page.php\';
    return $template;
}

if ( !is_admin() ) {
    if ( have_posts() ) {
        while ( have_posts() ) {
            the_post();
            if(get_the_ID() == get_option(\'my_plugin_page_id\')){
                add_filter( \'template_include\', \'custom_template\' );
            }
        }
    }
}
?>
这是代码给出的错误:

Fatal error: Call to a member function have_posts() on a non-object in /var/www/html/wordpress/wp-includes/query.php on line 782
my-custom-page.php 是仅包含HTMLCSS 在里面。

页面创建部分正常,原因是!is_admin() 部分,当我在管理面板时没有错误。

有什么提示吗?谢谢:)

P、 wordpress安装是4.4.2的基础,没有任何修改(没有新页面、不同主题、ecc…)

1 个回复
最合适的回答,由SO网友:Mark Kaplun 整理而成

在评估“基本”查询之前,代码执行得太早。

根据经验法则,在插件中,始终将代码挂接到适当的钩子,可能wp_loaded 如果没有更具体的