Erste Frage hier, obwohl das Lesen und Suchen meinen Speck einige Male gerettet hat.
Ich bin ein PHP-Hack bestenfalls, und ein WordPress-Theme, das ich baue, zwingt mich, viel zu lernen.
Ich bin auf ein Problem gestoßen, als ich versuchte, die Formate der nächsten und vorherigen Links basierend auf ihren jeweiligen Kategorien (und nicht auf der Seite der single.php) unterschiedlich anzuzeigen.
Hier mein bisher bester Versuch:
<?php next_post_link(
'%link',
if ( in_category( 'tweet' ) ) {
get_the_content()
} else {
echo '%title'
};,
FALSE
)?>
Dies führt zu einem Syntaxfehler.
Meine erste Frage ist kann ich sogar eine if-else-Anweisung innerhalb der Parameter einer Funktion verwenden?
Wenn ich komplett falsch an die Sache herangehe, dann geht es zurück ans Reißbrett. Dann freue ich mich auch über Alternativvorschläge!
Ich kenne folgende Arbeiten:
next_post_link( '%link', get_the_title(), FALSE );
next_post_link( '%link', '%title', FALSE );
Um zu versuchen, klarer zu sein, versuche ich, die Ausgabe der nächsten/vorherigen Links basierend auf der Kategorie der Links selbst und nicht auf der aktuellen Hostseite, auf der sie sich befinden, zu beeinflussen.
Das Problem, das ich habe, ist a) wie zu bestimmen, welche Kategorie die next_post_link() und previous_post_link() sind, und dann b) ihre anzeigen Link
Parameter entsprechend. Wenn ich die weiße Fahne hochziehen darf, die Beispiele, die ich gefunden habe, verwenden get_adjacent_post() und verschiedene Arrays und dergleichen scheinen mir an dieser Stelle weit über den Kopf zu gehen. Ich würde wirklich jemanden schätzen, der mich durch alle Lösungen führt, die sie verwenden.
Was soll angestrebt werden?
Ich denke, Sie mischen etwas zu viel, was Ihr Problem komplizierter macht, als es sein muss. Ich weiß, dass dies bei vielen neuen Dingen ziemlich leicht passieren kann, daher denke ich, dass es sich lohnt, einige Gedanken darüber zu verschwenden, was zu tun ist, bevor man mit dem Programmieren beginnt. Es soll am Ende helfen.
Beginnen Sie zu formulieren, was Sie erreichen wollen. Wenn ich Sie richtig verstehe, schreiben Sie, dass Sie die nächsten und vorherigen Links unter dem aktuellen Beitrag je nach Kategorie unterschiedlich anzeigen möchten.
Aber welche Kategorie? Der von der aktuelle Beitrag das zeigt? Oder die Kategorie der vorheriger/nächster verlinkter Beitrag?
Daneben können Beiträge stehen mehrere Kategorien. Möchten Sie die Anzeige basierend auf einer oder mehreren oder sogar allen Kategorien ändern?
Und zum Schluss: Wollen Sie tonnenweise ausgeben HTML-Tags für das optische Styling? Oder möchten Sie verwenden CSS dafür.
Wie es geht?
Nachdem Sie darüber nachgedacht haben was was du wirklich erreichen willst, kannst du dir ausdenken wie das kann gemacht werden.
Im Folgenden zeige ich einen Beispielcode, der Folgendes tut:
- Erklärt die Verwendung von Link-Format Parameter, den Sie ändern möchten.
- Zeigt, wie man die CSS-Klassen für die betreffenden Links erhält.
- Erweitert die Ausgabe eines Themes um diese CSS-Klassen.
- Machen Sie es für verschiedene Dateien innerhalb Ihres Designs wiederverwendbar.
Dieses Beispiel deckt also die Kategorien der verlinkten Posts für das visuelle Styling über das CSS Ihres Themes ab, was meiner Meinung nach der bevorzugte Weg ist.
Der PHP-Code
PHP ist ziemlich flexibel, also ist es am Ende einfach, das zu erledigen, aber ohne zu wissen, was genau zu tun ist, kann sich diese Flexibilität in PHP als Problem herausstellen, da es auch möglich ist, die Spur zu verlieren und dann etwas zu programmieren, das nicht funktioniert.
Sagen wir einfach, Sie möchten nur die ändern Link-Format für die next_post_link()
Funktion.
Die Funktion ersetzt %link
mit dem HTML-Link-Tag (<a href=...>Post Title</a>
), also wenn du nimmst 'This is the next post of my blog: %link; waiting to be read!'
Als Parameter haben Sie Text um den Link herum hinzugefügt.
<?php
$format="This is the next post of my blog: %link; waiting to be read!";
next_post_link($format);
?>
Sie können zusätzlich auch HTML-Tags darum herum hinzufügen:
<?php
$format="<span style="font-size:2em">%link</span>";
next_post_link($format);
?>
Dadurch haben alle nächsten Post-Links das Doppelte ihrer Standardschriftgröße.
Um dies jetzt etwas einfacher für das Thema zu machen, wäre es am besten, CSS-Klassen der Kategorie(n) hinzuzufügen, dann können Sie die Anzeige einfach innerhalb des CSS ändern.
<?php
$inSameCategory = true; // depends on what you want, can be false as well
$nextPost = get_adjacent_post($inSameCategory, '', false);
$cssClasses = get_post_class('next-post-link ', $nextPost);
$format = sprintf('<span class="$s>%link</span>', $cssClasses);
next_post_link($format);
?>
Dadurch wird der nächste Post-Link in a umbrochen <span>
enthält alle CSS-Klassen des verlinkten Beitrags plus a next-post-link
Klasse, falls Sie diese für den CSS-Selektor benötigen, um die Links zu stylen. Hier einige Beispiel-CSS:
.next-post-link.category-tweet {font-size: 2em;}
Wiederverwendbar machen
Da Sie einen Weiter- und einen Zurück-Link haben, können Sie diesen Code nur zum Ändern eines Parameters kopieren. Aber wir sind faul und packen es stattdessen in eine eigene Funktion:
/**
* my theme's format string for prev|next_post_link()
*
* @param bool $previous (optional) previous (true, default) or next (false) post
* @param bool $inSameCategory (optional) use same category, default: true
* @return string
*/
function my_prev_next_link_format($previous = true, $inSameCategory = true) {
$postId = get_adjacent_post($inSameCategory, '', $previous);
$cssClasses = get_post_class('next-post-link ', $nextPost);
$format = sprintf('<span class="$s>%link</span>', $cssClasses);
return $format;
}
Platzieren Sie diese Funktion in Ihrem Thema functions.php
. Es ist dann in allen Ihren Vorlagen verfügbar. Die Verwendung wird jetzt sehr einfach:
<?php prev_post_link(my_prev_next_link_format()); ?>
...
<?php next_post_link(my_prev_next_link_format(false)); ?>
Wenn Sie dies alles zusammengestellt haben, können Sie die Weiter- und Zurück-Links einfach im CSS Ihres Themas gestalten.
Versuchen:
$format_string = in_category('tweet') ?
'<span style="color:red;">%link</span>' : '%link';
next_post_link($format_string);
Der zweite und der dritte Parameter sind optional und standardmäßig auf title und false gesetzt.
Bearbeiten:
Ich kenne dieses Plugin nicht, aber…
if(in_category('tweet')){
$format_string = '<span style="color:red;">%link</span>';
$link_text = get_the_content();
}else{
$format_string = '%link';
$link_text="%title";
}
next_post_link($format_string, $link_text);