คำถามและคำตอบที่ได้รับคำตอบ
บางครั้งมีคำถามเหล่านี้ที่ทำให้คุณไม่สนใจและตามล่าคุณในภายหลังอีกครั้งในชีวิตและนี่เป็นคำถามเช่นนั้น
คำถามนี้ทำให้ฉันคิดเกี่ยวกับวิธีการแก้ไขปัญหาทางเลือก ดังที่ฉันได้กล่าวไปแล้วฟิลด์ที่กำหนดเองและกล่องเมตาจะอยู่ที่นั่นเพื่อเก็บข้อมูลเมตาชิ้นเล็ก ๆ และไม่ทำหน้าที่เป็นส่วนเสริมในการโพสต์เนื้อหาที่คุณสามารถเรียกใช้รหัสย่อและฟังก์ชันได้ ตามที่ฉันได้กล่าวแล้ววิธีการของคุณไม่ถูกต้องและไม่ควรใช้
สิ่งที่ฉันพบว่าน่าสนใจในโพสต์ของคุณคือคุณใช้ฟิลด์ที่กำหนดเองและกล่องเมตาเพื่อแสดงเนื้อหาที่กำหนดเองโดยไม่ได้ตั้งใจจากการป้อนข้อมูลของผู้ใช้ ดังนั้นฉันจึงนั่งและคิดหาวิธีที่เป็นไปได้ในการทำงานนี้และใช้ข้อมูลฟิลด์ที่กำหนดเองและข้อมูลเมตาบ็อกซ์อย่างถูกต้อง
นี่คือความคิดของฉัน:
สถานการณ์:
หมายเหตุ: สิ่งนี้สามารถแก้ไขได้เพื่อให้เหมาะกับความต้องการใด ๆ
ในโพสต์เดียวผู้ใช้ต้องการ / ต้องการแสดงเนื้อหาที่กำหนดเองแบบไดนามิกหลังโพสต์เพื่อให้เหมาะกับความต้องการของเขา สิ่งนี้ควรเป็นแบบไดนามิก เนื้อหาควรเป็นข้อความค้นหาที่กำหนดเองและผู้ใช้ต้องเลือกสิ่งที่จะแสดงเมื่อใดก็ตามที่เขาต้องการและสิ่งที่เขาต้องการ
ทางออกที่เป็นไปได้:
รหัสย่อจะไม่ทำงานที่นี่เนื่องจากรหัสย่อไม่สามารถดำเนินการในฟิลด์ที่กำหนดเองได้ ทั้งสองจะไม่do_shortcode
ทำงานเนื่องจากมันไม่ได้เป็นแบบไดนามิกและเป็นฮาร์ดโค้ดสิ่งที่เราไม่ต้องการ ในคำถามของคุณเราจะใช้ฟิลด์ที่กำหนดเอง ฉันเครียดอีกครั้งอย่าใช้ฟิลด์ที่กำหนดเองเพื่อดำเนินการค้นหาแบบกำหนดเองหรือรหัสย่อ
แผนการ:
เราจะใช้ข้อมูลที่กำหนดเองเพื่อเพียงบันทึกข้อโต้แย้งแบบสอบถามของเราที่มีทั้งหมด custom_query_arguments
ดังนั้นสิ่งที่เราทำคือเราจะสร้างฟิลด์ที่กำหนดเองที่เรียกว่า ในหน้าจอเครื่องมือแก้ไขบทความคุณจะเห็นฟิลด์ที่กำหนดเองของคุณพร้อมใช้งาน
ขั้นตอนต่อไปคือการเพิ่มอาร์กิวเมนต์ข้อความค้นหาที่กำหนดเองของเราในฟิลด์ของเรา ช่วยบอกว่าเราต้องแสดง 3 โพสต์จากหมวด 1 เรียงตามชื่อ ดังนั้นข้อโต้แย้งของเราควรมีลักษณะเช่นนี้: ( ในรูปแบบสตริง )
'posts_per_page=3&cat=1&orderby=title'
นี่คือสิ่งที่คุณควรป้อนในฟิลด์ที่กำหนดเองของคุณ เมื่อป้อนแล้วให้บันทึกค่าของฟิลด์ที่คุณกำหนดเอง
ถัดไปคือการสร้างแบบสอบถามที่กำหนดเองใน single.php ของคุณ สิ่งที่จำเป็นต้องที่นี่เราจะต้องได้รับความคุ้มค่าจากสนามของเราเองที่เป็นจริงข้อโต้แย้งแบบสอบถามของเราและอาหารที่ให้เป็นตัวอย่างใหม่ของWP_Query
การดึงการโพสต์ นอกจากนี้เรายังต้องตรวจสอบว่าเรามีการบันทึกค่าในฟิลด์ที่กำหนดเองจริงหรือไม่ถ้าฟิลด์ที่กำหนดเองนั้นว่างเปล่าไม่แสดงอะไรเลย
รหัส:
คุณสามารถลองสิ่งนี้ได้ใน single.php หลังการโพสต์เดียว
$args = get_post_meta( get_queried_object_id(), 'custom_query_arguments', true );
// check if the custom field has a value
if( ! empty( $args ) ) {
$q = new WP_Query( $args );
if( $q->have_posts() ) {
while( $q->have_posts() ) {
$q->the_post();
the_title();
}
wp_reset_postdata();
}
}
หากผู้ใช้ต้องการที่จะลบแบบสอบถามที่กำหนดเองเขาก็สามารถลบค่าของเขตข้อมูลที่กำหนดเองและปล่อยให้ฟิลด์ที่กำหนดเองว่างเปล่า หากเขาต้องการแสดงข้อความค้นหาเดียวกัน แต่จากหมวดหมู่ 10 และโพสต์ทั้งหมด 5 โพสต์เขาสามารถแทนที่ค่าเดิมด้วยค่าต่อไปนี้
'posts_per_page=5&cat=10&orderby=title'
หมายเหตุไม่กี่:
เป็นสิ่งสำคัญที่จะต้องใช้ซินแท็กซ์และรูปแบบที่ถูกต้องเมื่อป้อนข้อมูลลงในฟิลด์ที่กำหนดเองและกล่องเมตา ข้อผิดพลาดทางไวยากรณ์หรือข้อมูลที่ไม่ถูกต้องจะนำไปสู่ผลลัพธ์ที่ไม่พึงประสงค์หรือข้อผิดพลาดร้ายแรง สิ่งสำคัญคือให้ลูกค้าของคุณทราบข้อมูลดังกล่าว
คำตอบเดิม
ฉันไม่เข้าใจสิ่งที่คุณพยายามจะทำ แต่จากสิ่งที่ฉันสามารถบอกคุณได้นั่นคือสองสิ่งที่แยกจากกัน
ตัวเลือกที่ 1
apply_filters('the_content', $content);
$post->post_content
จะใช้ในการใช้ตัวกรองเนื้อหาที่จะโพสต์เนื้อหาดิบที่ไม่ได้กรองซึ่งมักจะมาจากการใช้ ตัวกรองเหล่านี้รวมถึงตัวกรองที่มีชื่อเสียงwp_autop
ซึ่งเพิ่มแท็ก pthe_content()
apply_filters('the_content', $content);
มีการใช้งานร่วมกับget_posts
ที่หนึ่งทำงานโดยตรงกับWP_Post
วัตถุโดยไม่ต้องใช้setup_postdata( $post )
ซึ่งทำให้แท็กแม่แบบเช่นthe_content()
พร้อมใช้งาน
ตัวเลือก 2
do_shortcode
ใช้เพื่อเพิ่มรหัสย่อที่ใดก็ได้ในไฟล์เทมเพลตนอกตัวแก้ไขข้อความในหน้าจอแก้ไขหน้าหลังโดยทั่วไปกรองรหัสย่อผ่านทางตะขอของพวกเขา
การใช้งานที่ถูกต้องมีดังนี้
ตัวอย่าง: การเพิ่มรหัสย่อคลังภาพในไฟล์เทมเพลต
echo do_shortcode( '[gallery]' )
แก้ไข 1
จากความคิดเห็นของคุณฉันจะไม่ใช้รหัสย่อเลย
หากคุณจะไม่เพิ่มรหัสย่อผ่านโปรแกรมแก้ไขข้อความและจะเพิ่มโดยตรง (hardcode) ผ่านทางdo_shortcode
ในไฟล์เทมเพลตฉันต้องการเพิ่มฟังก์ชันไปยังเทมเพลต
ตัวอย่าง:
หากคุณมีฟังก์ชั่นรหัสต่อไปนี้
function footag_func( $atts ) {
return "foo = {$atts['foo']}";
}
add_shortcode( 'footag', 'footag_func' );
คุณสามารถเรียกใช้ฟังก์ชันได้โดยตรงในเทมเพลตเช่น
echo footag_func();
มันเร็วกว่ามากด้วยวิธีนี้เนื่องจากไม่จำเป็นต้องมีการแยกวิเคราะห์รหัสย่อ
แก้ไข 2
ความซื่อสัตย์ที่นี่คุณทำผิดอย่างสมบูรณ์จากการแก้ไขของคุณ นั่นคือเหตุผลที่ฉันไม่เข้าใจคำถามเริ่มต้นของคุณ
บางครั้งฉันต้องเพิ่มเมตาโพสต์ในโพสต์ / หน้า / ประเภทโพสต์ที่กำหนดเองเพื่อให้พวกเขาสามารถเพิ่มรหัสย่อ (ตัวเลื่อนรูปแบบการติดต่อ ฯลฯ ) หรือเพียงแค่ข้อความธรรมดา มันเป็นข้อความที่ยื่น
เพื่อให้รหัสย่อทำงานได้ฉันใช้ตัวเลือก 1 .....
ช่องที่กำหนดเองเป็นไม่ได้ช่องข้อความและก็ไม่ได้หมายความว่าจะนำมาใช้ในการดำเนินการย่อและการที่เลื่อนเรื่องหรือรูปแบบการติดต่อ ไม่ควรใช้ฟิลด์ที่กำหนดเองเพื่อแทนที่เท็กซ์เอดิเตอร์ในโพสต์และเพจ
ตามที่ฉันระบุไว้ก่อนหน้าapply_filters('the_content', $content);
นี้มีวัตถุประสงค์เพื่อใช้ในการจัดรูปแบบกับเนื้อหาโพสต์ดิบ
คุณมีสองทางเลือกที่นี่
ฉันขอแนะนำอย่างจริงจังให้คุณพิจารณารูปลักษณ์ใหม่ ๆ ในโครงสร้างของคุณและสิ่งที่คุณต้องการบรรลุ ฟิลด์ที่กำหนดเองไม่ใช่ตัวแก้ไขข้อความและไม่สามารถเรียกใช้รหัสย่อหรือตัวเลื่อน
คำแนะนำของฉันอาจจะดูเป็นวิดเจ็ตที่กำหนดเองหรือระบบที่คุณสามารถใช้กับฟิลด์ที่กำหนดเอง