it-swarm-eu.dev

Zastavit WordPress automaticky přidávání značek k post obsahu

Existuje způsob, jak zastavit WordPress z automatického vkládání tagů <br> při přidávání návratů do textového editoru WordPress.

Chtěl bych, aby se choval spíš jako editor kódu, kde můžu strukturovat kód, jak se mi líbí, a usnadnit jeho čtení.

Kód, který používám v editoru, je:

[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]

Chtěl bych to takto strukturovat, aby bylo snadnější číst a upravovat:

[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]

Pokud se to však stane, budou do obsahu příspěvku přidány neviditelné <br> tagy, které rozloží rozvržení mé stránky.

24
mvaneijgen

Odpověď shea není ideální, protože v mnoha případech:

  • Nechcete odkládat vše z <br>, <p> atd. Chcete, aby to bylo jako výchozí chování vašeho vizuálního skladatele WP, který výše uvedený kód smaže
  • V mnoha případech je považován za "hackování jádra", protože se jedná o změnu výchozího chování jádra WP - například taková věc nebude předávat ThemeForest

Jak vidím, máte hlavně problémy s vámi. Správným způsobem, jak k tomu přistupovat, není změna výchozího chování (hackování jádra), ale pouze filtrování obsahu. Takže stačí přidat filtr a v proměnné předat pole vašich shotrcodes, které chcete filtrovat takto:

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");

Obsah uvnitř bude filtrován, a proto vaše zkratky nebudou obsahovat <br>, <p> atd., Ale ostatní části obsahu - například standardní text v editoru WP vytvořený uživatelem - budou mít stále plnou funkčnost WP.

Odkazy:

  1. the_content WP filtr
  2. Regex "překladatel"
  3. join PHP funkce
  4. preg_replace PHP funkce
25
Borek

Funkce wpautop() přidá do vašeho obsahu tagy <p> a <br>, aby se zachovaly konce řádků. Pokud byste raději přidali tyto značky sami, můžete odebrat filtry, které tuto funkci použijí, na obsah příspěvku:

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

Pokud chcete zachovat automatickou tvorbu paragarafu (vkládání tagů <p>) a stačí odstranit další <br> tagy, můžete tento kód použít místo toho:

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' );

Viz tento odkaz pokud si nejste jisti, kam chcete tento kód umístit.

13
shea

Nainstalujte plugin "Don't Muck My Markup".

Přidá možnost zaškrtnutí pro každou stránku, která zakáže automatické vkládání tagů <p> a <br>.

K dispozici je také možnost udělat to celé stránky.

3
Brent Baccala

Pravděpodobně je to textový editor, který dělá nepořádek. To jsem udělal:

Používám TinyMCE. V nastaveních textového editoru jsem nezaškrtl "Zastavit odebrání tagů" <p> "a" <Br>> při ukládání a zobrazování v editoru HTML ". Pracoval pro mě.

Borekova odpověď nefungovala pro můj případ použití, který je psaní surového HTML.

Pro tento účel jsem použil Kód Snippets plugin (umožňuje snadno přidat libovolné PHP snippets, které se spustí) vytvořit úryvek pro[html][/html]shortcode. Co je na tomto krátkém kódu super, je to, že je kompatibilní s toggle-wpautop pluginem, který umožňuje zakázat automatické vkládání tagů <br> a <p> na celý příspěvek. Můžete použít buď, mix & match.

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

Tato funkce pouze odstraní tag <p> a <br> pro krátký kód.

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

Možná byste mohli jednoduše použít do_shortcode() pokud vše, co máte ve svém obsahu, jsou zkratky, pokud nemáte žádný jiný obsah, který filtry potřebují.

Nepoznám kontext, ale pokud jste ve smyčce:

echo do_shortcode($post->post_content);

0
Simon