หยุด WordPress เพิ่มแท็ก <br> เพื่อโพสต์เนื้อหาโดยอัตโนมัติ


26

มีวิธีหยุด WordPress จากการแทรก<br>แท็กโดยอัตโนมัติเมื่อเพิ่มผลตอบแทนในโปรแกรมแก้ไขข้อความ WordPress หรือไม่

ฉันต้องการให้มันทำตัวเหมือนตัวแก้ไขโค้ดที่ฉันสามารถจัดโครงสร้างโค้ดตามที่ฉันชอบและทำให้อ่านง่าย

รหัสที่ฉันใช้ในเครื่องมือแก้ไขคือ:

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

ฉันต้องการจัดโครงสร้างแบบนี้เพื่อให้อ่านและแก้ไขได้ง่ายขึ้น:

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

อย่างไรก็ตามเมื่อทำเช่นนี้จะมีการ<br>เพิ่มแท็กที่มองไม่เห็นในเนื้อหาโพสต์ซึ่งจะทำให้เลย์เอาต์ของหน้าของฉันยุ่งเหยิง


คุณต้องการลบแท็กทุกที่หรือเฉพาะสำหรับรหัสย่อเหล่านั้นหรือไม่
เชียม

โปรดดูคำตอบของฉันที่นี่: wordpress.stackexchange.com/questions/55782/…
Chiedo

คำตอบ:


25

คำตอบของเชียไม่เหมาะเหมือนในหลายกรณี:

  • คุณไม่ต้องการที่จะตัดทุกอย่างจาก<br>, <p>ฯลฯ คุณต้องการให้มันเป็นพฤติกรรมเริ่มต้นสำหรับนักแต่งเพลงภาพ WP ของคุณซึ่งรหัสดังกล่าวจะลบ
  • ในหลายกรณีมันถูกพิจารณาว่าเป็น "แฮ็คคอร์" เนื่องจากนี่เป็นการเปลี่ยนแปลงพฤติกรรมหลักเริ่มต้นของ WP - ตัวอย่างเช่นสิ่งนี้จะไม่ส่งผ่าน ThemeForest

อย่างที่ฉันเห็นคุณส่วนใหญ่มีปัญหากับรหัสย่อของคุณ วิธีที่ถูกต้องในการเข้าถึงสิ่งนี้ไม่ได้เป็นการเปลี่ยนพฤติกรรมเริ่มต้น (แฮ็คหลัก) แต่เพียงเพื่อกรองเนื้อหา ดังนั้นเพียงเพิ่มตัวกรองและในตัวแปรผ่านอาร์เรย์ของ shotrcodes ของคุณคุณต้องการกรองเช่นนี้:

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

เนื้อหาภายในจะถูกกรองและดังนั้นรหัสย่อของคุณจะไม่เป็นของฟรี<br>, <p>แต่ส่วนอื่น ๆ ของเนื้อหา - ตัวอย่างเช่นข้อความมาตรฐานในตัวแก้ไข WP ที่สร้างโดยผู้ใช้ - จะยังคงมีฟังก์ชันการทำงานเต็มรูปแบบของ WP

อ้างอิง:

  1. ตัวกรอง the_content WP
  2. "นักแปล" Regex
  3. เข้าร่วมฟังก์ชั่น PHP
  4. ฟังก์ชัน preg_replace PHP

มันทำงานได้อย่างสมบูรณ์แบบในโครงการของฉัน ยอดเยี่ยมมากเยี่ยมยอดยอดเยี่ยม ..... ยอดเยี่ยมมาก!
arefin2k

@Borek มันยอดเยี่ยมและดูเหมือนว่าจะทำงานได้ดีจริงๆ (+1) แต่เพื่อปรับปรุงคำตอบของคุณคุณสามารถอธิบายได้ว่ามันทำอะไรอยู่? จากลักษณะของสิ่งต่าง ๆ มันเป็นการลบ<p>และ<br>แท็กจากใกล้ one_thirdและรหัสteam_memberย่อ แต่ฉันไม่แน่ใจ (ทักษะ REGEX ของฉันไม่ถึงขีดข่วน) คุณช่วยอธิบายสิ่งที่ทำกับเราและตอนนี้เราสามารถกำหนดค่าสำหรับรหัสย่ออื่นได้หรือไม่
dKen

@dKen มันทำในสิ่งที่คุณเขียน นอกเหนือจาก regex แล้วมันง่ายมากเพราะเนื้อหาถูกสร้างขึ้นโดยตัวกรอง WP ที่ชื่อ _ เนื้อหา เราเพียงแค่ต้องให้เนื้อหาในการกรองผ่านฟังก์ชั่นที่เราระบุสิ่งที่ (บล็อก) และวิธี (ตัวแทน) ในการกรอง ฉันได้เพิ่มการอ้างอิงเพื่อให้คุณเข้าใจมากขึ้นโดยการตรวจสอบแต่ละฟังก์ชันและตัวกรอง สำหรับการเพิ่มรหัสย่อเพิ่มเติมคุณเพียงแค่ต้องขยาย $ block อาร์เรย์โดยเพียงแค่เพิ่มชื่อรหัสย่อให้เหมือนjoin("|",array("one_third", "team_member", "next_one", "another_one", "one_more"));
Borek

... นักพัฒนามืออาชีพกล่าวว่าทำได้ดี Upvoting
fusion27

FYI ใช้งานได้เฉพาะเมื่อมีการดูหน้าเว็บ อย่างไรก็ตามในเครื่องมือแก้ไขของคุณคุณอาจยังเห็น <p> และ <s> ไม่เป็นไปตามปกติ
MarsAndBack

13

wpautop()ฟังก์ชั่นเพิ่ม<p>และ<br>แท็กกับเนื้อหาของคุณเพื่อที่จะรักษาตัวแบ่งบรรทัด หากคุณต้องการเพิ่มแท็กเหล่านี้ด้วยตนเองคุณสามารถลบตัวกรองที่ใช้ฟังก์ชั่นนี้กับเนื้อหาโพสต์:

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

หากคุณต้องการคงการสร้าง paragaraph อัตโนมัติ (การแทรก<p>แท็ก) และเพียงแค่ลบ<br>แท็กเพิ่มเติมคุณสามารถใช้รหัสนี้แทน:

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

ดูลิงค์นี้หากคุณไม่แน่ใจว่าจะใส่รหัสนี้ไว้ที่ใด


3

ติดตั้งปลั๊กอิน "Don't Muck My Markup"

เพิ่มตัวเลือกช่องทำเครื่องหมายในแต่ละหน้าเพื่อปิดใช้งานการแทรก<p>และ<br>แท็กอัตโนมัติ

นอกจากนี้ยังมีตัวเลือกในการทำเช่นนี้ทั่วทั้งไซต์


1

อาจเป็นโปรแกรมแก้ไขข้อความที่ทำให้ยุ่งเหยิง นี่คือสิ่งที่ฉันทำ:

ฉันใช้ TinyMCE ภายใต้การตั้งค่าสำหรับเครื่องมือแก้ไขข้อความฉันไม่ได้เลือก "หยุดลบแท็ก" <p> "และ" <br /> "เมื่อบันทึกและแสดงในเครื่องมือแก้ไข HTML" ทำงานให้ฉัน


0

บางทีคุณอาจจะใช้ก็ได้do_shortcode()ถ้าสิ่งที่คุณมีในเนื้อหาเป็นรหัสย่อตราบใดที่คุณไม่มีเนื้อหาอื่น ๆ ที่ต้องการตัวกรอง

ฉันไม่ทราบบริบท แต่ถ้าคุณอยู่ในวง:

echo do_shortcode($post->post_content);


0

คำตอบของ Borek ไม่ทำงานสำหรับกรณีการใช้งานของฉันซึ่งเขียน HTML ดิบ

สำหรับการที่ผมใช้รหัสตัวอย่างปลั๊กอิน (ช่วยให้คุณสามารถเพิ่มข้อมูล PHP พลที่ได้รับการทำงาน) เพื่อสร้างข้อมูลโค้ดสำหรับ[html][/html]รหัส สิ่งที่ยอดเยี่ยมเกี่ยวกับรหัสย่อนี้คือมันเข้ากันได้กับปลั๊กอินtoggle-wpautopซึ่งช่วยให้คุณปิดการใช้งานการแทรก<br>และ<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

ฟังก์ชั่นนี้จะลบ<p>และ<br>แท็กสำหรับรหัสย่อเท่านั้น

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

นอกจากนี้ยังส่งผลกระทบต่อทุกกรณีที่[และ]จะไม่ใช้เป็นส่วนหนึ่งของสายรหัส
fuxia

0

สำหรับผู้ที่ไม่คุ้นเคยกับการแฮ็กรหัสหรือไม่ต้องการใช้ปลั๊กอินคุณสามารถทำได้

1) คัดลอกโค้ดปัจจุบันทั้งหมดจากหน้า WP (โปรแกรมแก้ไขข้อความ) ป้อนคำอธิบายรูปภาพที่นี่

2) จากนั้นวางเพื่อ notepad และดำเนินการแก้ไขต่อไป (เพิ่มรหัสย่อรหัส html หรือรหัส css)

3) คัดลอกแปะจากแผ่นจดบันทึกไปยังหินกรวดเดียวกันในหน้า WP (โปรแกรมแก้ไขข้อความ)

4) กดปุ่ม [อัพเดท] ซึ่งอยู่ทางด้านขวามือของหน้า WP เดียวกันเพื่อเผยแพร่หน้า

ป้อนคำอธิบายรูปภาพที่นี่

5) ในที่สุดก็ดูมันบนเว็บไซต์สด

เคล็ดลับที่นี่คืออย่าเปลี่ยนกลับเป็น [โปรแกรมแก้ไขภาพ] สำหรับหน้านี้โดยเฉพาะจากนั้นผนวกอัตโนมัติสำหรับ [p] หรือ [br] จะไม่เกิดขึ้นอีก


-3

ทางออกที่ง่ายมาก: อย่าใช้บรรทัดใหม่ในตัวแก้ไข wordpress ใช่บรรทัดใหม่มีความชัดเจน อย่างไรก็ตามในกรณีนี้จะไม่มีการหยุดพักอาจเป็นที่ยอมรับได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.