Stoppen Sie WordPress, indem Sie automatisch <br> Tags zum Posten von Inhalten hinzufügen

26

Gibt es eine Möglichkeit, WordPress daran zu hindern, <br>beim Hinzufügen von Retouren im WordPress-Texteditor automatisch Tags einzufügen?

Ich möchte, dass es sich eher wie ein Code-Editor verhält, in dem ich den Code so strukturieren kann, wie ich es mag, und ihn leichter lesbar machen kann.

Der Code, den ich im Editor verwende, ist:

[one_third][team_member image_url="team_member.jpg" name="Laser vision" role="WordPress Designer"][custom_button url="#"]For more information[/custom_button][/team_member][/one_third][one_third][team_member image_url="team_member.jpg" name="Laser vision" role="WordPress Designer"][custom_button url="#"]For more information[/custom_button][/team_member][/one_third][one_third][team_member image_url="team_member.jpg" name="Laser vision" role="WordPress Designer"][custom_button url="#"]For more information[/custom_button][/team_member][/one_third]

Ich würde es gerne so strukturieren, damit es einfacher zu lesen und zu bearbeiten ist:

[one_third]
[team_member image_url="team_member.jpg" name="Laser vision" role="WordPress Designer"]
[custom_button url="#"]For more information[/custom_button]
[/team_member]
[/one_third]

[one_third]
[team_member image_url="team_member.jpg" name="Laser vision" role="WordPress Designer"]
[custom_button url="#"]For more information[/custom_button]
[/team_member]
[/one_third]

[one_third]
[team_member image_url="team_member.jpg" name="Laser vision" role="WordPress Designer"]
[custom_button url="#"]For more information[/custom_button]
[/team_member]
[/one_third]

In diesem Fall werden jedoch unsichtbare <br>Tags zum Beitragsinhalt hinzugefügt, die das Layout meiner Seite durcheinander bringen.

mvaneijgen
quelle
Möchten Sie die Tags überall oder nur für diese Shortcodes entfernen ?
Shea
Bitte sehen Sie meine Antwort hier: wordpress.stackexchange.com/questions/55782/…
Chiedo

Antworten:

25

Die Antwort von shea ist nicht ideal, wie in vielen Fällen:

  • Sie möchten nicht alles von <br>, <p>usw. entfernen. Sie möchten, dass es sich bei Ihrem WP Visual Composer um ein Standardverhalten handelt, das durch den obigen Code gelöscht wird
  • In vielen Fällen wird dies als "Hacken des Kerns" angesehen, da sich dadurch das Standardkernverhalten von WP ändert - so etwas wird beispielsweise nicht an ThemeForest weitergegeben

Wie ich sehe, haben Sie hauptsächlich Probleme mit Ihren Kurzwahlen. Der richtige Weg, dies zu erreichen, besteht nicht darin, das Standardverhalten zu ändern (den Kern zu hacken), sondern nur den Inhalt zu filtern. Fügen Sie einfach einen Filter hinzu und übergeben Sie in einer Variablen ein Array Ihrer shotrcodes, die Sie folgendermaßen filtern möchten:

function the_content_filter($content) {
    $block = join("|",array("one_third", "team_member"));
    $rep = preg_replace("/(<p>)?\[($block)(\s[^\]]+)?\](<\/p>|<br \/>)?/","[$2$3]",$content);
    $rep = preg_replace("/(<p>)?\[\/($block)](<\/p>|<br \/>)?/","[/$2]",$rep);
return $rep;
}
add_filter("the_content", "the_content_filter");

Der Inhalt wird gefiltert und daher sind Ihre Shortcodes frei von <br>, <p>usw., aber die anderen Teile des Inhalts - zum Beispiel Standardtext im vom Benutzer erstellten WP-Editor - verfügen weiterhin über die volle Funktionalität von WP.

Verweise:

  1. the_content WP-Filter
  2. Regex "Übersetzer"
  3. Join PHP-Funktion
  4. preg_replace PHP-Funktion
Borek
quelle
In meinem Projekt hat es perfekt funktioniert. Genial, großartig, wunderbar, brillant ..... So viel exzellent!
arefin2k
@Borek Das ist großartig und scheint wirklich gut zu funktionieren (+1), aber um deine Antwort zu verbessern, könntest du erklären, WAS es tut? Von den Blicken der Dinge, es ist zu entfernen <p>und <br>Tags aus der Nähe one_third und team_memberKurzwahlnummern , aber ich bin nicht ganz sicher , (meine REGEX Fähigkeiten sind definitiv nicht bis zu kratzen). Können Sie uns beschreiben, was es für uns bedeutet, und jetzt können wir es für andere Shortcodes konfigurieren?
dKen
@dKen Es macht genau das, was Sie geschrieben haben. Abgesehen von Regex ist es ganz einfach, da der Inhalt durch einen integrierten WP-Filter the_content gefiltert wird. Wir müssen nur den zu filternden Inhalt über eine Funktion angeben, in der wir angeben, was (Block) und wie (Wiederholung) gefiltert werden soll. Ich habe Referenzen hinzugefügt, damit Sie dies besser verstehen, indem Sie die einzelnen Funktionen und Filter überprüfen. Um weitere Shortcodes hinzuzufügen, müssen Sie nur das $ block-Array erweitern, indem Sie einfach Shortcode-Namen hinzufügen, wie z. B.join("|",array("one_third", "team_member", "next_one", "another_one", "one_more"));
Borek,
... sagte der Profi-Entwickler, gut gemacht. Upvoting.
Fusion27
Zu Ihrer Information: Dies funktioniert nur, wenn die Seite angezeigt wird. In Ihrem Editor werden jedoch möglicherweise weiterhin wie gewohnt unerwünschte <p> - und <br> -Dateien angezeigt.
MarsAndBack
13

Die wpautop()Funktion fügt Inhalte hinzu <p>und <br>markiert sie, um Zeilenumbrüche zu vermeiden. Wenn Sie diese Tags lieber selbst hinzufügen möchten, können Sie die Filter entfernen, die diese Funktion auf den Beitragsinhalt anwenden:

remove_filter( 'the_content', 'wpautop' );
remove_filter( 'the_excerpt', 'wpautop' );

Wenn Sie die automatische Paragaraph-Erstellung (Einfügen von <p>Tags) beibehalten und nur die zusätzlichen <br>Tags entfernen möchten , können Sie stattdessen diesen Code verwenden:

remove_filter( 'the_content', 'wpautop' );
remove_filter( 'the_excerpt', 'wpautop' );

function wpse_wpautop_nobr( $content ) {
    return wpautop( $content, false );
}

add_filter( 'the_content', 'wpse_wpautop_nobr' );
add_filter( 'the_excerpt', 'wpse_wpautop_nobr' );

Sehen Sie diesen Link, wenn Sie nicht sicher sind, wo Sie diesen Code ablegen sollen.

shea
quelle
3

Installieren Sie das Plugin "Don't Muck My Markup".

Zu jeder Seite wird eine Kontrollkästchenoption hinzugefügt, die das automatische Einfügen von <p>und deaktiviert<br> -Tags .

Es besteht auch die Möglichkeit, dies auf der gesamten Website zu tun.

Brent Baccala
quelle
1

Wahrscheinlich ist es der Texteditor, der für Unordnung sorgt. Das habe ich gemacht:

Ich benutze TinyMCE. In den Einstellungen für den Texteditor habe ich "Entfernen der Tags" <p> "und" <br /> "beim Speichern beenden und im HTML-Editor anzeigen" deaktiviert. Hat für mich gearbeitet.

Svein E. Slotte Pedersen
quelle
0

Vielleicht könntest du es einfach benutzen do_shortcode() wenn Sie nur Shortcodes in Ihrem Inhalt haben, solange Sie keine anderen Inhalte haben, die die Filter benötigen.

Ich kenne den Kontext nicht, aber wenn Sie auf dem Laufenden sind:

echo do_shortcode($post->post_content);

Simon
quelle
0

Boreks Antwort funktionierte nicht für meinen Anwendungsfall, in dem rohes HTML geschrieben wird.

Dafür habe ich das Plugin Code Snippets verwendet (mit dem Sie einfach beliebige PHP-Snippets hinzufügen können, die ausgeführt werden), um ein Snippet für einen [html][/html]Shortcode zu erstellen . Das Coole an diesem Shortcode ist, dass er mit dem toggle-wpautop- Plugin kompatibel ist, mit dem Sie das automatische Einfügen von <br>und <p>Tags für einen gesamten Beitrag deaktivieren können . Sie können entweder Mix & Match verwenden.

function html_shorttag_filter($content) {
  // Based on: https://wordpress.org/plugins/lct-temporary-wpautop-disable-shortcode/
  $new_content = '';
  $pieces = preg_split('/(\[html\].*?\[\/html\])/is', $content, -1, PREG_SPLIT_DELIM_CAPTURE);
  // don't interfere with plugin that disables wpautop on the entire page
  // see: https://plugins.svn.wordpress.org/toggle-wpautop/tags/1.2.2/toggle-wpautop.php
  $autop_disabled = get_post_meta(get_the_ID(), '_lp_disable_wpautop', true);
  foreach ($pieces as $piece) {
    if (preg_match( '/\[html\](.*?)\[\/html\]/is', $piece, $matches)) {
      $new_content .= $matches[1];
    } else {
      $new_content .= $autop_disabled ? $piece : wpautop($piece);
    }
  }
  // remove the wpautop filter, but only do it if the other plugin won't do it for us
  if (!$autop_disabled) {
    remove_filter('the_content', 'wpautop');
    remove_filter('the_excerpt', 'wpautop');
  }
  return $new_content;
}
// idea to use 9 is from: https://plugins.svn.wordpress.org/wpautop-control/trunk/wpautop-control.php
add_filter('the_content', 'html_shorttag_filter', 9);
add_filter('the_excerpt', 'html_shorttag_filter', 9);
Greg
quelle
0

Diese Funktion entfernt nur das Tag <p>und <br>für den Shortcode.

function bnd_fix_shortcodes_extra_line_break( $content ){
  $array = array (
    '<p>['    => '[',
    ']</p>'   => ']',
    ']<br />' => ']'
  );
  $content = strtr( $content, $array );
  return $content;
}
add_filter('the_content', 'bnd_fix_shortcodes_extra_line_break');
Burhan Nasir
quelle
Es wirkt sich auch auf alle Fälle , in denen [und ]sind nicht als Teil eines Short Anruf verwendet.
Fuxia
0

Wenn Sie mit Code-Hack nicht vertraut sind oder kein Plug-In verwenden möchten, können Sie dies tun.

1) kopiere den gesamten aktuellen Code von den WP-Seiten (Texteditor) Bildbeschreibung hier eingeben

2) Fügen Sie es in den Editor ein und fahren Sie mit der Bearbeitung fort (fügen Sie Kurzcode, HTML-Code oder CSS-Code hinzu).

3) Kopieren und Einfügen aus dem Editor in den gleichen Geröll auf den WP-Seiten (Texteditor)

4) Klicken Sie auf die Schaltfläche [UPDATE], die sich auf der rechten Seite derselben WP-Seiten befindet, um die Seiten zu veröffentlichen

Bildbeschreibung hier eingeben

5) Zuletzt eine Vorschau auf der Live-Site anzeigen

Der Trick hier ist, nicht mehr auf [Visual Editor] für diese bestimmten Seiten zurückzuschalten, sondern automatisch nach [p] anzuhängen oder [br] nicht mehr vorzukommen.

HO LI Pin
quelle
-3

Eine sehr einfache Lösung: Verwenden Sie keine neuen Zeilen im WordPress-Editor. Ja, neue Zeilen klären. In diesem Fall können jedoch keine Pausen noch akzeptabel verständlich sein.

JK
quelle