Hentikan WordPress secara otomatis menambahkan tag <br> untuk mengirim konten

26

Apakah ada cara untuk menghentikan WordPress dari memasukkan <br>tag secara otomatis saat menambahkan pengembalian pada editor teks WordPress.

Saya ingin itu berperilaku lebih seperti editor kode di mana saya dapat menyusun kode sesuka saya dan membuatnya mudah dibaca.

Kode yang saya gunakan di editor adalah:

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

Saya ingin menyusunnya seperti ini sehingga lebih mudah untuk membaca dan mengedit:

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

Namun, ketika melakukan ini akan ada <br>tag yang tidak terlihat ditambahkan ke konten posting yang akan mengacaukan tata letak halaman saya.

mvaneijgen
sumber
Apakah Anda ingin menghapus tag di mana-mana , atau hanya untuk kode pendek itu?
shea
Silakan lihat jawaban saya di sini: wordpress.stackexchange.com/questions/55782/…
Chiedo

Jawaban:

25

Jawaban oleh shea tidak ideal seperti dalam banyak kasus:

  • Anda tidak ingin menghapus semuanya dari <br>, <p>dll. Anda menginginkannya sebagai perilaku default untuk komposer visual WP Anda yang akan dihapus oleh kode di atas
  • Dalam banyak kasus itu dianggap sebagai "peretasan inti" karena ini mengubah perilaku inti default WP - misalnya hal seperti itu tidak akan meneruskan ThemeForest

Seperti yang saya lihat Anda terutama memiliki masalah dengan kode pendek Anda. Cara yang tepat untuk mendekati ini bukan dengan mengubah perilaku default (hack the core) tetapi untuk hanya menyaring konten. Jadi tambahkan saja filter dan dalam variabel, lewati array shotrcode yang ingin Anda filter seperti ini:

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

Konten di dalamnya akan difilter dan oleh karena itu kode pendek Anda akan bebas dari <br>, <p>dll. Tetapi bagian konten lainnya - misalnya teks standar dalam editor WP yang dibuat oleh pengguna - masih akan memiliki fungsionalitas penuh WP.

Referensi:

  1. the_content WP filter
  2. Regex "penerjemah"
  3. bergabung dengan fungsi PHP
  4. preg_replace fungsi PHP
Borek
sumber
Ini bekerja dengan baik di proyek saya. Luar biasa, luar biasa, luar biasa, brilian ..... Sangat luar biasa!
arefin2k
@ Borek Ini luar biasa dan sepertinya bekerja sangat baik (+1), tetapi untuk meningkatkan jawaban Anda, Anda bisa menjelaskan APA yang dilakukannya? Dari hal-hal yang terlihat, itu menghapus <p>dan <br>tag dari dekat one_third dan team_memberkode pendek, tapi saya tidak yakin (keterampilan REGEX saya pasti tidak sampai awal). Bisakah Anda menguraikan apa fungsinya bagi kami, dan sekarang kami dapat mengonfigurasinya untuk shortcode lainnya?
dKen
@dKen Melakukan apa yang Anda tulis. Selain regex itu benar-benar sederhana karena konten dilekatkan dengan filter WP in_content bawaan. Kami hanya perlu memberikan konten untuk disaring melalui fungsi di mana kami menentukan apa (blok) dan bagaimana (rep) untuk menyaring. Saya telah menambahkan referensi sehingga Anda lebih memahami hal ini dengan memeriksa setiap fungsi dan filter. Sedangkan untuk menambahkan lebih banyak kode pendek, Anda hanya perlu memperluas array $ block dengan hanya menambahkan nama-nama kode pendek sepertijoin("|",array("one_third", "team_member", "next_one", "another_one", "one_more"));
Borek
... kata pengembang pro, bagus sekali. Upvoting.
fusion27
FYI ini hanya berfungsi ketika halaman dilihat. Namun, di editor Anda, Anda mungkin masih melihat <p> yang tidak diinginkan dan <br> seperti biasa.
MarsAndBack
13

The wpautop()Fungsi menambahkan <p>dan <br>tag untuk konten Anda untuk melestarikan jeda baris. Jika Anda lebih suka menambahkan tag ini sendiri, maka Anda dapat menghapus filter yang menerapkan fungsi ini pada konten posting:

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

Jika Anda ingin mempertahankan pembuatan paragaraph otomatis (menyisipkan <p>tag) dan hanya menghapus <br>tag tambahan , Anda dapat menggunakan kode ini sebagai gantinya:

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

Lihat tautan ini jika Anda tidak yakin di mana harus meletakkan kode ini.

shea
sumber
3

Instal plugin "Don't Muck My Markup".

Itu menambahkan opsi kotak centang untuk setiap halaman menonaktifkan penyisipan otomatis <p>dan <br>tag.

Ada juga opsi untuk melakukan ini di seluruh situs.

Brent Baccala
sumber
1

Mungkin editor teks yang membuat berantakan. Inilah yang saya lakukan:

Saya menggunakan TinyMCE. Di bawah pengaturan untuk editor teks, saya menghapus centang "Berhenti menghapus tag" <p> "dan" <br /> "saat menyimpan dan menampilkannya di editor HTML". Bekerja untukku.

Svein E. Slotte Pedersen
sumber
0

Mungkin Anda bisa menggunakan do_shortcode()jika konten yang Anda miliki adalah kode pendek, selama Anda tidak memiliki konten lain yang memerlukan filter.

Saya tidak tahu konteksnya, tetapi jika Anda berada di lingkaran:

echo do_shortcode($post->post_content);

Simon
sumber
0

Jawaban Borek tidak berfungsi untuk kasus penggunaan saya, yaitu menulis HTML mentah.

Untuk itu saya menggunakan plugin Code Snippets (memungkinkan Anda dengan mudah menambahkan snippet PHP sewenang-wenang) untuk membuat snippet untuk [html][/html]kode pendek. Apa yang keren tentang kode pendek ini adalah bahwa itu kompatibel dengan plugin toggle-wpautop yang memungkinkan Anda menonaktifkan penyisipan otomatis <br>dan <p>tag pada seluruh posting. Anda dapat menggunakan, mencampur & mencocokkan.

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
sumber
0

Fungsi ini hanya menghapus tag <p>dan <br>untuk kode pendek.

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
sumber
Hal ini juga mempengaruhi semua kasus di mana [dan ]yang tidak digunakan sebagai bagian dari panggilan shortcode.
fuxia
0

bagi mereka yang tidak terbiasa dengan peretasan kode atau tidak ingin menggunakan plug-in, Anda dapat melakukan ini.

1) salin semua kode saat ini dari halaman WP (editor teks) masukkan deskripsi gambar di sini

2) kemudian tempel ke notepad dan lanjutkan perlu edit (tambahkan kode pendek, kode html, atau kode css)

3) Salin tempel dari notepad ke scree yang sama di halaman WP (editor teks)

4) Tekan tombol [UPDATE] yang terletak di sebelah kanan halaman WP yang sama untuk menerbitkan halaman

masukkan deskripsi gambar di sini

5) Akhirnya pratinjau di situs langsung

Kuncinya di sini adalah jangan beralih kembali ke [editor visual] untuk halaman-halaman ini kemudian menambahkan otomatis untuk [p] atau [br] tidak akan terjadi lagi.

HO LI Pin
sumber
-3

Solusi yang sangat sederhana: Jangan gunakan baris baru di editor wordpress. Ya, baris baru jelas. Namun, dalam hal ini tidak ada istirahat yang masih dapat diterima.

JK
sumber