web-dev-qa-db-ja.com

プラグイン内からis_page()が機能しない

私のプラグインで私がやっている:

function get_user_strains()
{
    $userID = get_current_user_id();

    $args = array(
        'post_type'     => 'strain',
        'orderby'       => 'post_date',
        'order'            => 'DESC',
        'post_status'      => 'publish',
    );

    $strains = get_posts($args);

    global $userStrains;
    $userStrains = array();

    foreach($strains as $i)
    {
        $meta = get_post_meta($i->ID);
        //var_dump($meta);
        if($i->post_author == $userID)
        {
            $i->type = $meta['type'][0];
            $i->rating = $meta['rating'][0];
            //var_dump($i);
            array_Push($userStrains, $i);
        }
    }

    //var_dump($userStrains);
    $userStrainsJson = json_encode($userStrains);

    //var_dump($userStrains);

    wp_reset_query();
}
add_action('init','get_user_strains');

function edit_strain()
{
    if(is_page()) echo "IS A PAGE";
    $id = isset($_GET['id']) ? $_GET['id'] : 'no id set';

    global $editStrainData;
    $editStrainData = get_post($id);
    global $editStrainMeta;
    $editStrainMeta = get_post_meta($id);

    wp_reset_query();
}
add_action('init','edit_strain');

作成したカスタムテンプレートがページかどうかを判断しようとしています。私のテンプレートページで "The Loop"を使用しても使用しなくても違いはありません。

edit_strain()ではis_page()はfalseを返しています。 get_user_strains()get_postsを使って私と関係があるのでしょうか。私はWP_Query()を使うべきだと聞きましたが、そのget_posts()WP_Query()に変換する方法が本当にわかりません。

これは問題でしょうか。
Stack Exchangeを検索しましたが、問題を解決するものが見つかりませんでした。

5
Timothy Owen

現在のページにページを表示する必要があるかどうかを知るにはアクションinitが早すぎます。少なくともtemplate_redirectまで待つ必要があります。しかし、ページに何か印刷したい場合は、the_contentを使用してください。

5
fuxia