如何在elementor SELECT2控件中显示post名称和postlink

How to display post name and post link in elementor SELECT2 control

我在其中创建了一个元素控件我已经显示了所有 posts 列表但是当我在 protected function render() 中显示 post 标题时它显示 post ID不是 post 名称,我想显示 post 名称,还想在 <a href="<?php the_permalink(); ?>">Read More</a>

中获取 post 的永久链接
$options = array();

$posts = get_posts( array(
    'post_type'  => 'digital_card'
) );

foreach ( $posts as $key => $post ) {
    $options[$post->ID] = get_the_title($post->ID);
}
    
        
        $this->add_control(
            'post_name',
            [
                'label' => __( 'Select Posts', 'plugin-domain' ),
                'label_block' => ('bool'),
                'type' => \Elementor\Controls_Manager::SELECT,
                'multiple' => true,
                'options' => $options,
                
            ]
        );

protected function render() {

        $settings = $this->get_settings();
        $show_title = $settings['post_name'];
        ?>
        
        <?php echo $show_title; ?>
        <a href="<?php the_permalink(); ?>">Read More</a>
        <?php

    }


    

}

所以您想要获取所有自定义 post_type 'digital_card' 的所有 IDpost_title?!您不需要 $keyget_the_title() 来获取控件类型 Controls_Manager::SELECT2 的选项的值。如果您希望编辑器面板中的选择字段全宽,您可以设置 'label_block' => true

protected function _register_controls()内的部分:

$options = [];

$posts = get_posts( [
        'post_type'  => 'digital_card'
] );

foreach ( $posts as $post ) {
    $options[ $post->ID ] = $post->post_title;
}

$this->add_control(
    'posts',
    [
        'label' => __( 'Select Posts', 'your-plugin-domain' ),
        'type' => \Elementor\Controls_Manager::SELECT2,
        'label_block' => true,
        'multiple' => true,
        'options' => $options,      
    ]
);

所以现在选中的post中的ID会保存在控制数据posts中。

要将 post_title 和 link 显示到相关的 post,您可以通过 post 的 ID 获取值,作为数组存储在 $settings['posts'] 中。

protected function render() 内的部分:

$settings = $this->get_settings();
$posts = $settings[ 'posts' ];
foreach( $posts as $post ) {
    echo get_the_title( $post );
    ?>
    <a href="<?php echo get_permalink( $post ); ?>">Read More</a>
    <?php
}