web-dev-qa-db-ja.com

サイドバーを特定の投稿から隠すにはどうすればよいですか。

特定の投稿(ページではない)のサイドバーを非表示にしたいです。これどうやってするの?

背景については、Googleとここの両方でかなり検索しました。投稿とページで異なるサイドバーを表示したり、特定のページで特定のサイドバーを表示(または非表示)するための解決策はたくさんありますしかし、サイドバーを特定の1つの投稿から隠すことについては何もありません。

1
ahockley

これが私がTwitterで述べたアイデアです。

function special_post_template( $template ) {
  // Identify a single query for the special post
  if ( is_single() && 10 == get_the_ID() )
    $template = get_template_directory() . '/special-single.php';

  return $template;
}

add_filter( 'template_include', 'special_post_template' );
3
Evan

1つの可能性のあるアプローチはサイドバーを含んでいないのでサイドバーをそれほど隠しているわけではありません。

ページ数

サイト内の各ページで異なるテンプレートを使用できます。通常、あなたが通常期待するように、ヘッダ、フッタ、コンテンツ、サイドバーを含むデフォルト( "Default Template")を使用するテンプレートを作成するでしょう。ただし、サイト用に 新しいページテンプレート を作成することもできます。これは同じフォーマットに従いますが、サイドバーは省略します。

あるいは、問題のページのIDまたはスラッグを知っている場合は、そのペース用のページテンプレートを作成することもできます。次のいずれかのファイルをテーマに配置するだけです。

  • page- {id} .php
  • page- {slug} .php

WordPressはデフォルトでそれをロードします。

投稿

そのため、WordPressはこの種の階層をサポートしていません。カスタム投稿タイプを作成してから、サイドバーなしでその投稿タイプを表示するsingle-{post-type}.phpを作成することでそれを回避することができますが、それはあなたが望むものではないかもしれません。

ただし、テーマが適切なボディクラスを適用している場合は、投稿IDに基づいてcanをフィルタ処理し、CSSを使用して非表示にすることができます。テーマで body_class() を適切に使用すると、クラスpostid-{post-id}がボディに適用されます。あなたはあなたの利点のためにこれを使うことができます。

/* ... All of your other CSS rules */

body.postid-15 .sidebar {
    display: none;
}

このアプローチの欠点はサイドバーのマークアップがまだロードされていることです、それはCSSで隠されているだけです。しかし今のところ(WordPressがすでに持っているページごとのテンプレートに似た投稿ごとのテンプレートを実装するまで)、これで十分です。

1
EAMann

Is_single()条件をタップするだけではできませんか。またはあなたのsingle.phpファイルに触れることができませんか。可能であれば、私はあなたの投稿に対してif文を試してみます。

if(is_single('potato-pancake')) {
   // nothing
} else {
   get_sidebar();
} 

参考: http://codex.wordpress.org/Conditional_Tags#A_Single_Post_Page

1
TheShnozz

1つの投稿のみに解決策が必要な場合は、管理パネルからpost idを入手してください。

(あなたがedit linkの上にマウスを持っていくと、あなたはpost=xxxのような何かを見るでしょう。xxxはあなたのpost idです)

それからこのようにあなたの単一のテンプレートを変更してください

あなたの投稿IDは66だとしましょう

if (!is_single(66)) {
   get_sidebar();
} 
1
Giri

継続的にこれが必要な場合は、Justin TadlockのTheme Layoutsエクステンションをお勧めします。あなたが望むレイアウトを定義することができます。各投稿にラジオボックスが表示されるので、それぞれに必要なレイアウトを指定できます。

あなたがWordPressのテーマを知っていればそれは簡単です。拡張機能、テーマレイアウト用のadd_theme_supportを含めてください。

それは彼のHybrid Coreフレームワークに含まれています、あるいはあなたはここでテーマレイアウト拡張クラスを見ることができます: https://github.com/justintadlock/hybrid-core/tree/master/inc

1
mindctrl

WordPress 4.7以降を使用している場合は、ブログの投稿にもページテンプレートを適用できます。テンプレート投稿タイプとして投稿を追加するだけです。

ページテンプレートで、次のように定義します。

<?php 
/*
Template Name: Full-width layout
Template Post Type: post, page
*/
?>

これでポストエディタウィンドウに、そのテンプレートを表示しているページ属性セクションが表示されます。

参照: https://developer.wordpress.org/themes/template-files-section/page-template-files/#creating-page-templates-for-specific-post-types

0
Nigel

私の考えでは、より良い方法は投稿テンプレートを使用することです。

その場合、特定の投稿からサイドバーを隠す/削除するには、次の手順に従ってください。

1 - あなたのテーマ投稿テンプレート、おそらくsingle.phpを開き、allを選択して内容をコピーします。

2 - セカンダリ投稿テンプレート、つまりnosidebar-posts.phpを作成し、single.phpのコンテンツを貼り付けて、1行目に次のコードを追加します。

<?php
/*
Template Name Posts: No Sidebar Posts
*/
?>

3 - nosidebar-posts.phpから<?php get_sidebar(); ?>を削除するか、好きなように編集します。

4 - カスタムポストテンプレートプラグインをインストールします

5 - 投稿の編集に移動すると、[投稿テンプレートボックス]が表示されます。[サイドバーなし]を選択したら、作業は完了です。

投稿の編集ページでテンプレートを選択するだけで、投稿からサイドバーを削除したり、全角、サイドバーなしなどの複数のテンプレートを作成できます。

0
drabello