it-swarm.com.de

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

Gibt es eine Möglichkeit, WordPress daran zu hindern, beim Hinzufügen von Retouren im WordPress-Texteditor automatisch <br>-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 ihn mag, und das Lesen erleichtert.

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 Inhalt des Beitrags hinzugefügt, die das Layout meiner Seite durcheinander bringen.

24
mvaneijgen

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 visuellen Komponisten 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 Shotcodes, 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.

Referenzen:

  1. the_content WP filter
  2. Regex "Übersetzer"
  3. Join PHP Funktion
  4. preg_replace PHP function
25
Borek

Die Funktion wpautop() fügt Ihrem Inhalt <p>- und <br>-Tags hinzu, 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 Inhalt der Posts 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' );

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

13
shea

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

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

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

3
Brent Baccala

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.

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

Dafür habe ich das Code Snippets Plugin 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 Plugin toggle-wpautop kompatibel ist, mit dem Sie das automatische Einfügen von <br>- und <p>-Tags in 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);
0
Greg

Diese Funktion entfernt nur die Tags <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');
0
Burhan Nasir

Vielleicht könnten Sie einfach do_shortcode() verwenden, wenn Sie nur Shortcodes in Ihrem Inhalt haben, solange Sie keinen anderen Inhalt haben, der die Filter benötigt.

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

echo do_shortcode($post->post_content);

0
Simon