web-dev-qa-db-ja.com

(is_page(** PAGE ID **))が機能しない場合

私はフォローしています このチュートリアル Google Content Experimentsコードをheader.phpに追加することについて。

以下のコードをheader.phpに追加しました。

<?php if (is_page('346') ):?>
    <!-- Google Analytics Content Experiment code -->
        ...
    <!-- End of Google Analytics Content Experiment code -->
<?php endif; ?>

これはフロントエンドでコンテンツ実験コードを生成しませんでした。私は試した:

<?php if (is_page(346) ):?>
    <!-- Google Analytics Content Experiment code -->
        ...
    <!-- End of Google Analytics Content Experiment code -->
<?php endif; ?>

これもうまくいきませんでした。

このコードが機能していない理由がわかりますか。ありがとう。

2
Steve

あなたはこれを使用することができます

global $post;

<?php if( $post->ID == 346) { ?>

      <!-- do your stuff here -->

<?php } ?>

あなたはこれをヘッダのどこか他の場所で使うことができます。

7
Waqas Shakeel

もっと簡単な解決策は、 is_page() の引数としてtitleまたはslugを渡すことです。そのページを別のサーバーに複製しても問題ありません。

<?php
if (is_page( 'Page Title' ) ):
  # Do your stuff
endif;
?>
3
RRikesh

is_single($ post)を使ってみてください

あなたの場合はis_single(346)かis_single( '346')の両方がうまくいくはずです

もっとここに

1
Huseyn

init のようなフックは、 ではまったく動作しません。

少なくともparse_queryをフックする必要があります。

これはWordPressコアのis_page関数のコードの一部です。

 * @param int|string|array $page Optional. Page ID, title, slug, path, or array of such. Default empty.
 * @return bool Whether the query is for an existing single page.
 */
public function is_page( $page = '' ) {
    if ( !$this->is_page )
        return false;

    if ( empty( $page ) )
        return true;

    $page_obj = $this->get_queried_object();

    $page = array_map( 'strval', (array) $page );

    if ( in_array( (string) $page_obj->ID, $page ) ) {
        return true;
    } elseif ( in_array( $page_obj->post_title, $page ) ) {
        return true;
    } elseif ( in_array( $page_obj->post_name, $page ) ) {
        return true;
    }

ご覧のとおり、以下のすべてが機能します。

is_page(198); # (int) ID
is_page('198'); # (string) ID
is_page('Some Title'); (string) Title, case-sensitive
is_page('some-title'); (string) Slug

しかし、少なくともparse_queryまたはそれ以降のフックにフックする必要があります。あなたはここでWordPressフックオーダーを見ることができます: https://codex.wordpress.org/Plugin_API/Action_Reference

1

ID番号から''(単一引用符)を削除してみてください。動作します:

is_page(34)
0