为什么将自定义元数据值添加到固定链接

时间:2014-06-07 17:34:28

标签: wordpress-plugin wordpress-theming wordpress

我有这个代码将自定义元框speaker添加到自定义帖子类型event

/* 
|--------------------------------------------
| Speaker Meta Box in events
|--------------------------------------------
*/
function speaker_box() { 
    add_meta_box( 
        'speaker',
        __( 'Speaker', 'dbem' ),
        'speaker_box_content',
        'event',
        'side',
        'high'
    );
}
add_action( 'add_meta_boxes', 'speaker_box' );

/* 
|--------------------------------------------
| Speaker meta box content in events
|--------------------------------------------
*/
function speaker_box_content( $post ) { 
    // generate a nonce field
    wp_nonce_field( basename( __FILE__ ), 'dbem-speaker-nonce' );
    // get previously saved meta values (if any)
    $speaker = get_post_meta( $post->ID, 'speaker', true );
    echo '<label for="speaker"></label>';
    echo '<select name="speaker" id="speaker">';
    echo '<option value="">Select</option>';
    foreach (get_speakers() as $key => $value) {
        if($speaker == $key) {
            echo '<option value="'.$key.'" selected="selected">'.$value.'</option>';
        } else {
            echo '<option value="'.$key.'">'.$value.'</option>';
        }
    }
    echo '</select>';
}

/* 
|--------------------------------------------
| Get all speakers
|--------------------------------------------
*/
function get_speakers() { 

    $output = array();

    $args = array(
      'post_type' => 'speaker',
    );
    $speakers = new WP_Query( $args );
    if( $speakers->have_posts() ) {
      while( $speakers->have_posts() ) {
        $speakers->the_post();
        $output[get_the_ID()] = get_the_title();
      }
    }
    return $output; 
}

enter image description here

我在永久链接设置中选择了post name。但是这里不是将事件标题添加到固定链接,而是将speaker元数据的最后一个下拉项文本和一些数字添加到URL。这有什么不对?我通过评论上面的代码对此进行了测试,问题仅出在此代码中。

保存功能,

function speaker_box_save( $post_id ) { 

  if ( 'event' != $_POST['post_type'] ) {
    return;
  } 
  $speaker = $_POST['speaker'];
  if( isset($speaker)) {
    update_post_meta( $post_id, 'speaker', $speaker );
  }
}
add_action( 'save_post', 'speaker_box_save' );

1 个答案:

答案 0 :(得分:2)

不确定如何或为何,但WP_Query正在影响新创建帖子的帖子。它需要最后speaker并将其用作添加的新event的slug。

有人想知道为什么这是WordPress开发人员最常见的Q&amp; A: When should you use WP_Query vs query_posts() vs get_posts()?

使用以下内容可以解决这个奇怪的问题:

function get_speakers() { 
    $output = array();
    $args = array(
      'post_type' => 'portfolio',
    );
    $speakers = get_posts( $args );
    if( $speakers ) {
        foreach( $speakers as $spk ) {
            $output[$spk->ID] = $spk->post_title;
        }
    }
    return $output; 
}