it-swarm.com.de

bedingtes Problem mit is_home und is_front_page

Ich habe diesen Ausschnitt in einer "portfolio-loop.php" -Datei. Ich benutze get_template_part, um die Schleife auf der Startseite und auf anderen Seiten anzuzeigen.

Ich habe dies in der Schleife:

<?php if( !is_home() || !is_front_page() ) { ?>
  <p><?php the_time('F Y'); ?></p>
<?php endif } ?>

Ich kann es scheinbar nicht schaffen, die Titelseite auszuschließen. Könnte es daran liegen, dass es sich in einer eigenen Vorlage befindet?

bearbeiten

Ok, ich habe einige meiner semantischen Fehler dank s_ha_dum und Tom Nowell behoben. Ich habe die folgenden Varianten ausprobiert:

<?php if ( !is_home() && !is_front_page() ) { ?> 
    <!--nada -->
<?php } else { ?>
    <p><?php the_time('F j, Y'); ?></p>
<?php } ?>



//dropping is_home() and trying to keep it as simple as possible
<?php if(!is_front_page()) { ?>
    <p><?php the_time('F j, Y'); ?></p>
<?php } ?>

Ich kann die Uhrzeit auf der Titelseite immer noch nicht verbergen. Am besten '<- nada ->' erscheint sowohl auf meiner Homepage (home.php) als auch in meinem Archiv (category-blog.php). Wird meine benutzerdefinierte Kategorieseite auch als Startseite angezeigt?

bearbeite 2

Was ich versuche im Klartext zu machen:

Ich habe eine Schleife auf meiner Startseite (static, home.php), in der drei meiner neuesten Blog-Beiträge über get_template_part angezeigt werden. Dieselbe Schleife wird für meine category-blog.php/archive-Auflistung verwendet, zeigt jedoch die letzten 10 Beiträge an. Ich möchte das Datum und die Uhrzeit nicht auf der Titelseite anzeigen, um das Layout übersichtlicher zu gestalten, sondern nur auf den anderen Seiten, auf denen diese Schleife angezeigt wird.

3
Alan

Mal sehen, ob ich mich verwirren kann.

Wenn entweder Ihrer beiden OR-Bedingungen true ist, wird der Code ausgeführt.

is_home und is_front_page können true für verschiedene Seiten zurückgeben, in Ihrem Fall negiert. Wenn Sie eine statische from-Seite haben, wie es sich anhört, ist is_home die Blog-Indexseite.

Hinweis: WordPress 2.1 behandelt diese Funktion anders als frühere Versionen - Siehe statische Startseite. Wenn Sie eine statische Seite als Startseite auswählen (siehe is_front_page ()), wird dieses Tag auf Ihre "Beitragsseite" angewendet.

http://codex.wordpress.org/Function_Reference/is_home

Dies bedeutet, dass is_home für jede Seite außer Ihrem Blog-Index false ist. Dies bedeutet, dass Ihre !is_home-Bedingung true für jede Seite außer dieser Blog-Indexseite ist und Ihr Code fast die ganze Zeit ausgeführt wird.

Nun die Dokumente für is_front_page.

Es wird TRUE zurückgegeben, wenn die Blog-Hauptseite angezeigt wird und Einstellungen-> Lesen-> Anzeige der Startseite auf "Ihre letzten Beiträge" oder "Eine statische Seite" und der Wert für "Startseite" eingestellt sind Aktuelle Seite wird angezeigt.

http://codex.wordpress.org/Function_Reference/is_front_page

Abhängig von Ihren Einstellungen gibt es zwei Möglichkeiten. Möglicherweise wird true für Ihre Blog-Indexseite oder true für Ihre statische Seite zurückgegeben. Ich denke, dass Sie eine statische Titelseite haben, so dass is_front_pagetrue für diese Seite zurückgibt und die !is_front_page-Bedingung falsch ist. Weil !is_home (wahrscheinlich, wenn ich Ihnen folge) true ist, wird der Code immer noch ausgeführt.

Wenn Sie <p><?php the_time('F Y'); ?></p> aus sowohl dem Blogindex als auch der statischen Startseite ausschließen möchten, negieren Sie die gesamte OR-Anweisung:

if( !(is_home() || is_front_page()) )

Wenn einer von beiden true ist, ist das Ganze false.

Wenn Sie es nur von der Titelseite ausschließen möchten, sollten Sie den Teil !is_home überhaupt nicht benötigen.

Wenn Sie && anstelle von || verwenden, müssten sowohl is_home als auch is_front_pagefalse sein, damit der Code ausgeführt werden kann. Das heißt, Sie befinden sich nicht im Blog-Index und nicht gleichzeitig vorne.

8
s_ha_dum

Bevor ich mich mit Ihrem Hauptproblem befasse, muss ich auf einen offensichtlichen Syntaxfehler hinweisen:

<?php if( !is_home() || !is_front_page() ) { ?>
  <p><?php the_time('F Y'); ?></p>
<?php endif } ?>

Warum gibt es die endif? Es macht überhaupt keinen Sinn, und alles in der Programmierung hat einen Zweck/Grund. Sie können es auch in marigolds-potatoe-farm ändern, es hat den gleichen Effekt wie ein schwerwiegender Fehler. Also loswerden.

Dies ist die grundlegende if-Anweisung:

if ( this statement is true ) {
    do this
} else {
    do that
}

Es gibt eine Abkürzung für if (): endif; usw, benutze diese nicht, sie sind in diesem Stadium mehr Ärger als sie wert sind.

All dies sollte von Ihrem Editor erfasst und hervorgehoben worden sein. Wenn nicht, verwenden Sie ein inkompetentes Bearbeitungsprogramm. Holen Sie sich einen Editor mit automatischer Vervollständigung von Klammern, PHP Flusen/Syntaxprüfung, Farbcodierung und automatischer Vervollständigung.

Beispiele umfassen, sind aber nicht beschränkt auf:

  • Netbeans
  • PHPStorm
  • SublimeText
  • Komodo Edit/IDE
  • Finsternis

Mach es dir nicht schwer

Fahren Sie mit Ihrer Logikfrage fort

if( !is_home() || !is_front_page() ) {

Ist das in englischer Prosa:

Wenn es sich nicht um die Startseite handelt, tun Sie dies auch, wenn es sich nicht um die Startseite handelt

Wenn es also die Homepage ist, wird sie es tun. Wenn es die Titelseite ist, wird es das tun.

Ich glaube, Sie meinten Folgendes:

wenn es weder die Homepage noch die Startseite ist, dann mach es.

Welches ist:

if ( !( is_home() || is_front_page() ) ) {

Oder es kann geschrieben werden als:

if ( !is_home() && !is_front_page() ) {

Oder noch weiter:

if ( !is_home() ) {
    if ( !is_front_page() ) {

Also zusammenfassen

  • Das ist Grundlogik
  • Sie brauchen keine PHP Kenntnisse, um die grundlegende Logik zu kennen. Die Leute haben im alten Griechenland die boolesche wahre/falsche Logik herausgefunden. Einige Kinder tun dies in der Schule
  • Ein Verständnis der richtigen Verwendung von Punktzeichen wird Ihnen hier helfen, da es demonstriert, wie das Bewegen des Kommas über 1 Wort die Bedeutung vollständig ändert, genauso wie das Bewegen des! && oder || kann das gleiche tun. Es dreht sich alles um Semantik.
  • Wenn Sie sich einen anständigen Editor zulegen, sparen Sie massive Zeit und Mühe
  • Dein Scheck hat wunderbar funktioniert, er hat nur das Falsche überprüft
5
Tom J Nowell

Wenn das Ziel so ist:

Ich möchte das Datum und die Uhrzeit nicht auf der Titelseite anzeigen, um das Layout übersichtlicher zu gestalten, sondern nur auf den anderen Seiten, auf denen diese Schleife angezeigt wird.

Dann sollten Sie eine einfache Bedingung verwenden können:

<?php if ( ! is_front_page() ) { ?>
    <p><?php the_time('F Y'); ?></p>
<?php } ?>

Ohne genau zu wissen, was Sie erreichen möchten, ist es nicht wirklich möglich, die genaue bedingte Anweisung anzugeben, die Sie benötigen. Das heißt, hier sind die Bedingungen, unter denen entweder/oder/beide von is_home() und is_front_page() wahr und/oder falsch sind.

Im Algemeinen

  • is_home() ist wahr, wenn Blog Posts Index angezeigt wird, entweder auf der Startseite der Website oder auf einer bestimmten statischen Seite
  • is_front_page() ist wahr, wenn Site Front Page angezeigt wird, unabhängig davon, ob auf der Site Front Page der Blog Posts-Index oder eine festgelegte statische Seite angezeigt wird

Titelseitenanzeigen: Blog-Posts

Wenn auf der Startseite der Site festgelegt ist, dass der Blogpost-Index angezeigt wird :

  • 'posts' == get_option( 'show_on_front' )
  • Beide is_home() und is_front_page() sind true , wenn die erste Seite des Blog Posts-Index angezeigt wird.
  • Auf der Startseite von Site sind sowohl is_home() als auch is_front_page() true
  • is_home() ist true und is_front_page() ist false auf nachfolgenden Seiten (d. h. paginierte Anzeige) des Blogpost-Index
  • Auf jeder anderen Seite sind beide false

Front Page Displays: Statische Seite

Wenn die Site-Startseite so eingestellt ist, dass eine statische Seite angezeigt wird:

  • 'page' == get_option( 'show_on_front' )
  • is_home() ist false , und is_front_page() ist true , auf der Site Front Page (d. h. Page ID = get_option( 'page_on_front' ))
  • is_home() ist true und is_front_page() ist false auf der statischen Seite, auf der der Blog Posts-Index angezeigt wird (d. h. Seiten-ID = get_option( 'page_for_posts' )
  • Beide is_home() und is_front_page() sind false auf jeder anderen Seite
5
Chip Bennett

Ich gehe davon aus, dass is_home und is_front_pageis_page ähnlich sind und die gleichen Eigenschaften wie sie können nicht in The Loop verwendet werden .

Meine derzeitige Aufgabe besteht zumindest darin, eine Variable an The Loop zu senden.

Also, als grobes Beispiel, sagen wir auf Ihrer Homepage, Sie haben eine Portfolio-Schleife ... vielleicht in etwa die folgende Zeile:

get_template_part( 'loop', 'portfolio' );

Fügen Sie eine Variable vor dieser Zeile ein und machen Sie sie global , damit Sie sie später in Ihrer Schleife wie folgt verwenden können:

global $hide_time;
$hide_time = true;
get_template_part( 'loop', 'portfolio' );

Dann, in Ihrer Schleife , können Sie diese Variable als Bedingung für Ihre Schleife verwenden:

<?php
global $hide_time;
if( $hide_time != true ) { ?>
    <p><?php the_time('F Y'); ?></p>
<?php } ?>

HINWEIS: Die Variable muss in beiden Dateien global sein.

0
Giraldi

Nehmen Sie einfach den Code aus der Vorlage und binden Sie ihn in die Funktionsdatei Ihres untergeordneten Themes ein:

    add_action ( 'your_themes_hook', 'display_date_exclude_front_page' );
    function display_date_exclude_front_page() {
if ( !is_front_page() ) {
    echo the_time('F Y');
        }
    }

Hinweis: Vergessen Sie nicht, your_themes_hook durch Ihren Themes-Hook oder einen WordPress-Hook zu ersetzen.

is_front_page gibt auf der Startseite immer true zurück.

is_home () gibt true für Ihre Posts-Seite zurück, unabhängig davon, wo sich diese befindet.

Dies kann jede Seite sein, die eine Blogseitenvorlage verwendet, oder die Startseite, wenn Sie die Standardeinstellung Leseeinstellungen verwenden. Andernfalls ändern Sie sie dort.

enter image description here

0
Brad Dalton