Dừng WordPress tự động thêm thẻ <br> để đăng nội dung


26

Có cách nào để ngăn WordPress tự động chèn <br>thẻ khi thêm trả về trong trình soạn thảo văn bản WordPress.

Tôi muốn nó hoạt động giống như một trình soạn thảo mã hơn, nơi tôi có thể cấu trúc mã theo cách tôi thích và làm cho nó dễ đọc.

Mã tôi đang sử dụng trong trình chỉnh sửa là:

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

Tôi muốn cấu trúc nó như thế này để dễ đọc và chỉnh sửa hơn:

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

Tuy nhiên, khi làm điều này sẽ có <br>các thẻ vô hình được thêm vào nội dung bài đăng sẽ làm rối tung bố cục trang của tôi.


Bạn có muốn xóa các thẻ ở khắp mọi nơi , hoặc chỉ cho các mã ngắn?
shea

Xin vui lòng xem câu trả lời của tôi ở đây: wordpress.stackexchange.com/questions/55782/NH
Chiedo

Câu trả lời:


25

Câu trả lời của shea không lý tưởng như trong nhiều trường hợp:

  • Bạn không muốn loại bỏ mọi thứ từ <br>, <p>v.v. Bạn muốn nó như một hành vi mặc định cho trình soạn thảo trực quan WP của bạn mà đoạn mã trên sẽ xóa
  • Trong nhiều trường hợp, nó được coi là "hack lõi" vì điều này đang thay đổi hành vi cốt lõi mặc định của WP - ví dụ như một điều như vậy sẽ không vượt qua ThemeForest

Như tôi có thể thấy bạn chủ yếu có vấn đề với bạn shortcodes. Cách đúng đắn để tiếp cận điều này không phải là thay đổi hành vi mặc định (hack lõi) mà chỉ là lọc nội dung. Vì vậy, chỉ cần thêm một bộ lọc và trong một biến vượt qua một mảng shotrcodes bạn muốn lọc như thế này:

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

Nội dung bên trong sẽ được lọc và do đó mã ngắn của bạn sẽ không có <br>, <p>v.v. nhưng các phần khác của nội dung - ví dụ văn bản tiêu chuẩn trong trình chỉnh sửa WP do người dùng tạo - vẫn sẽ có đầy đủ chức năng của WP.

Tài liệu tham khảo:

  1. bộ lọc WP
  2. Regex "dịch giả"
  3. tham gia chức năng PHP
  4. Hàm PHP preg numplace

Nó hoạt động hoàn hảo trong dự án của tôi. Tuyệt vời, to lớn, tuyệt vời, rực rỡ ..... Rất nhiều xuất sắc!
arefin2k

@Borek Điều này thật tuyệt vời và dường như hoạt động rất tốt (+1), nhưng để cải thiện câu trả lời của bạn, bạn có thể giải thích nó đang làm gì? Từ vẻ bề ngoài của mọi thứ, nó sẽ loại bỏ <p><br>gắn thẻ từ gần one_thirdteam_membermã ngắn, nhưng tôi không chắc chắn lắm (kỹ năng REGEX của tôi chắc chắn không bị trầy xước). Bạn có thể phác thảo những gì nó làm cho chúng tôi, và bây giờ chúng tôi có thể định cấu hình nó cho các mã ngắn khác không?
dKen 17/2/2016

@dKen Nó đang làm chính xác những gì bạn đã viết. Ngoài regex, nó thực sự đơn giản vì nội dung được điều chỉnh bởi bộ lọc WP tích hợp the_content. Chúng ta chỉ cần cung cấp nội dung cho bộ lọc thông qua chức năng trong đó chúng ta chỉ định cái gì (khối) và cách (rep) để lọc. Tôi đã thêm tài liệu tham khảo để bạn hiểu rõ hơn về điều này bằng cách kiểm tra từng chức năng và bộ lọc. Đối với việc thêm nhiều mã ngắn, bạn chỉ cần mở rộng mảng $ bằng cách thêm tên mã ngắn vào đó như thế nàojoin("|",array("one_third", "team_member", "next_one", "another_one", "one_more"));
Borek

... cho biết nhà phát triển chuyên nghiệp, hoàn thành tốt. Nâng cao.
fusion27

FYI này chỉ hoạt động khi trang được xem. Tuy nhiên, trong trình chỉnh sửa của bạn, rất có thể bạn vẫn thấy các <p> và <br> không mong muốn như bình thường.
MarsAndBack

13

Các wpautop()chức năng bổ sung <p><br>thẻ nội dung của bạn để bảo toàn ngắt dòng. Nếu bạn muốn tự thêm các thẻ này, thì bạn có thể xóa các bộ lọc áp dụng chức năng này cho nội dung bài đăng:

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

Nếu bạn muốn duy trì việc tạo paragaraph tự động (chèn <p>thẻ) và chỉ cần xóa các <br>thẻ bổ sung , bạn có thể sử dụng mã này để thay thế:

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

Xem liên kết này nếu bạn không chắc chắn nơi để đặt mã này.


3

Cài đặt plugin "Đừng đánh dấu đánh dấu của tôi".

Nó thêm một tùy chọn hộp kiểm cho mỗi trang vô hiệu hóa tự động chèn <p><br>thẻ.

Ngoài ra còn có một tùy chọn để làm điều này trên toàn trang web.


1

Có lẽ đó là trình soạn thảo văn bản làm cho một mớ hỗn độn. Đây là những gì tôi đã làm:

Tôi sử dụng TinyMCE. Trong cài đặt cho trình soạn thảo văn bản, tôi đã bỏ chọn "Dừng xóa các thẻ" <p> "và" <br /> "khi lưu và hiển thị chúng trong trình chỉnh sửa HTML". Đã làm cho tôi.


0

Có lẽ bạn chỉ có thể sử dụng do_shortcode()nếu tất cả những gì bạn có trong nội dung của mình là mã ngắn, miễn là bạn không có bất kỳ nội dung nào khác cần bộ lọc.

Tôi không biết bối cảnh, nhưng nếu bạn đang ở trong vòng lặp:

echo do_shortcode($post->post_content);


0

Câu trả lời của Borek không hoạt động đối với trường hợp sử dụng của tôi, đó là viết HTML thô.

Vì vậy, tôi đã sử dụng plugin Code Snippets (cho phép bạn dễ dàng thêm các đoạn mã PHP tùy ý chạy) để tạo một đoạn mã cho một [html][/html]mã ngắn. Điều thú vị về shortcode này là nó tương thích với plugin toggle-wpautop cho phép bạn vô hiệu hóa chức năng chèn <br><p>thẻ tự động trên toàn bộ bài đăng. Bạn có thể sử dụng một trong hai, trộn và kết hợp.

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

Chức năng này chỉ loại bỏ thẻ <p><br>thẻ cho 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');

Nó cũng ảnh hưởng đến tất cả các trường hợp trong đó []đang không sử dụng như là một phần của một cuộc gọi shortcode.
fuxia

0

Đối với những người không quen với việc hack mã hoặc không muốn sử dụng trình cắm, bạn có thể thực hiện việc này.

1) sao chép tất cả mã hiện tại từ các trang WP (trình soạn thảo văn bản) nhập mô tả hình ảnh ở đây

2) sau đó dán vào notepad và tiếp tục yêu cầu chỉnh sửa (thêm mã ngắn, mã html hoặc mã css)

3) Sao chép dán từ notepad vào cùng một khung trên các trang WP (trình soạn thảo văn bản)

4) Nhấn nút [CẬP NHẬT] nằm ở phía bên phải của cùng một trang WP để xuất bản các trang

nhập mô tả hình ảnh ở đây

5) Cuối cùng xem trước nó trên trang web trực tiếp

Mẹo ở đây là không chuyển trở lại [trình chỉnh sửa trực quan] cho các trang cụ thể này sau đó tự động thêm vào [p] hoặc [br] sẽ không xảy ra nữa.


-3

Một giải pháp rất đơn giản: Không sử dụng các dòng mới trong trình soạn thảo wordpress. Có, dòng mới làm rõ. Tuy nhiên, trong trường hợp này, không có vi phạm vẫn có thể được chấp nhận.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.