从WordPress小部件获取数据以修改帖子内容

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从WordPress小部件获取数据以修改帖子内容相关的知识,希望对你有一定的参考价值。

我正在尝试创建一个接受段落编号的小部件,并在帖子中那些指定的段落之后插入一些html(用于广告)。例如,如果用户在第一个字段中输入1,在第二个字段中输入3,我希望我定义的某些标记出现在这些段落之后。

我创建了小部件,并设法在$paragraph_targets = array('1', '3');方法内通过insert_post_ads手动创建数组时使其工作。

我所坚持的是如何将小部件中的段落编号添加到insert_post_ads方法中。

完整代码在下面。

    class Ad_Inserter extends WP_Widget 

        public function __construct() 
            parent::__construct(
                'ad_inserter',
                'Ad Inserter',
                array(
                    'description' => 'Inserts ads in post content',
                )
            );
            add_filter( 'the_content', array( $this, 'insert_post_ads' ));
        

        public function form($instance)    
            $instance = array_merge( [
                'ad_1' => '',
                'ad_2' => '',
            ], $instance );
            ?>
            <p>
                <label for="<?php echo esc_attr( $this->get_field_id( 'ad_1' ) ); ?>">Ad 1 Position</label>
                <input type="text" name="<?php echo esc_attr( $this->get_field_name( 'ad_1' ) ); ?>" id="<?php echo esc_attr( $this->get_field_name( 'ad_1' ) ); ?>" value="<?php echo esc_attr( $instance['ad_1'] ); ?>">
            </p>
            <p>
                <label for="<?php echo esc_attr( $this->get_field_id( 'ad_2' ) ); ?>">Ad 2 Position</label>
                <input type="text" name="<?php echo esc_attr( $this->get_field_name( 'ad_2' ) ); ?>" id="<?php echo esc_attr( $this->get_field_name( 'ad_2' ) ); ?>" value="<?php echo esc_attr( $instance['ad_2'] ); ?>">
            </p>

            <?php
        

        public function widget($args, $instance) 

        

        public function insert_post_ads($content) 
            if ( is_single() && ! is_admin() ) 
                $paragraph_targets = array('1', '3');
                sort($paragraph_targets);
                return $this->insert_after_paragraph( $paragraph_targets, $content );
            
            return $content;
        

        // Go through paragraphs and insert ads
        public function insert_after_paragraph( $paragraph_targets, $content ) 
            $ad_ids = array('advert-1', 'advert-2');

            $closing_p = '</p>';
            $paragraphs = explode( $closing_p, $content );

            foreach ($paragraphs as $index => $paragraph) 
                if ( trim( $paragraph ) ) 
                    $paragraphs[$index] .= $closing_p;
                

                if ( $paragraph_targets[0] == $index + 1 ) 
                    $ad_code = '<div id="' . $ad_ids[0] . '" class="advert">**** AD ****</div>';
                    $paragraphs[$index] .= $ad_code;
                    array_shift($paragraph_targets);
                    array_shift($ad_ids);
                
            

            return implode( '', $paragraphs );
        

    

add_action('widgets_init','registerWidget');
function registerWidget() 
  register_widget('Ad_Inserter');

答案
https://www.geeksforgeeks.org/how-to-declare-a-global-variable-in-php/

以上是关于从WordPress小部件获取数据以修改帖子内容的主要内容,如果未能解决你的问题,请参考以下文章

PHP WordPress小部件:显示单个帖子

WordPress小部件:显示单个帖子

WordPress:以编程方式从 Post Window 隐藏小部件

Wordpress:最近的帖子小部件

WordPress小部件中的重复表单字段?

调整父小部件的大小以适应 Flutter 中的子帖子“变换”