为帖子获取正确的值

时间:2012-09-20 作者:Dan

我有一个名为state的分类法,列出了所有的州。创建帖子时,我希望选择分类法,但也希望在自定义字段中自动捕获状态名称。

我已经设法让这段代码正常工作了,但是我很难从那篇文章中获得正确的值。正在复制状态名称,但它来自不同的记录。

我知道这和foreach有关,但当我贴上这个帖子时,它就不起作用了。

此外,无论我是通过管理员还是通过提交或编辑帖子的表单的前端,它都应该可以工作。

这是代码,欢迎您的帮助。

谢谢

add_action( \'save_post\', \'add_state\' );
function add_state( $post_id ){
    // Bail if we\'re doing an auto save
    if( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE ) return;
    //check if they selected your state term
    $state = get_terms(\'state\', \'name\');
    foreach ( $state as $state );

    //insert post meta
    update_post_meta($post_id,\'state\',$state->name);
}

1 个回复
SO网友:Tom J Nowell

我在你的问题中添加了正确的缩进,这应该会使问题更加明显。

问题是你的意思是:

foreach ( $state as $state )
    update_post_meta($post_id,\'state\',$state->name);
你实际上说的是:

foreach ( $state as $state );
update_post_meta($post_id,\'state\',$state->name);
扩展到:

foreach ( $state as $state ) {
    // do nothing
}

//insert post meta
update_post_meta($post_id,\'state\',$state->name);
foreach循环将立即执行后面的内容。在这里,foreach后面是一个空语句。

为了防止这种情况再次发生:

正确缩进代码始终使用大括号{ } 在for/if/while/do/foreach循环/条件上,代码编辑器(如sublime text或Komodo)只需单击按钮或命令即可轻松地重新缩进代码

以下是foreach循环的外观:

foreach ( $state as $state ) {
    update_post_meta($post_id,\'state\',$state->name);
}

edit

我还注意到了另一个错误,我以前真的应该注意到这个错误

$state = get_terms(\'state\', \'name\');
foreach ( $state as $state ) {
    update_post_meta($post_id,\'state\',$state->name);
}
请注意,您每次都在使用state?它们不应该是一样的。相反,请执行以下操作:

$states = get_terms(\'state\', \'name\');
foreach ( $states as $state ) {
    update_post_meta($post_id,\'state\',$state->name);
}
foreach州S as状态

此外,您实际上并没有检查状态是否是您选择的状态,因此类似这样:

$states = get_the_terms(\'state\', \'name\');
if ( $states && ! is_wp_error( $states ) ){
    foreach ( $states as $state ) {
        if($state->name == $_POST[\'yourinputsnamehere\']){
            update_post_meta($post_id,\'state\',$state->name);
            break;
        }
}
}

结束

相关推荐

为帖子获取正确的值 - 小码农CODE - 行之有效找到问题解决它

为帖子获取正确的值

时间:2012-09-20 作者:Dan

我有一个名为state的分类法,列出了所有的州。创建帖子时,我希望选择分类法,但也希望在自定义字段中自动捕获状态名称。

我已经设法让这段代码正常工作了,但是我很难从那篇文章中获得正确的值。正在复制状态名称,但它来自不同的记录。

我知道这和foreach有关,但当我贴上这个帖子时,它就不起作用了。

此外,无论我是通过管理员还是通过提交或编辑帖子的表单的前端,它都应该可以工作。

这是代码,欢迎您的帮助。

谢谢

add_action( \'save_post\', \'add_state\' );
function add_state( $post_id ){
    // Bail if we\'re doing an auto save
    if( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE ) return;
    //check if they selected your state term
    $state = get_terms(\'state\', \'name\');
    foreach ( $state as $state );

    //insert post meta
    update_post_meta($post_id,\'state\',$state->name);
}

1 个回复
SO网友:Tom J Nowell

我在你的问题中添加了正确的缩进,这应该会使问题更加明显。

问题是你的意思是:

foreach ( $state as $state )
    update_post_meta($post_id,\'state\',$state->name);
你实际上说的是:

foreach ( $state as $state );
update_post_meta($post_id,\'state\',$state->name);
扩展到:

foreach ( $state as $state ) {
    // do nothing
}

//insert post meta
update_post_meta($post_id,\'state\',$state->name);
foreach循环将立即执行后面的内容。在这里,foreach后面是一个空语句。

为了防止这种情况再次发生:

正确缩进代码始终使用大括号{ } 在for/if/while/do/foreach循环/条件上,代码编辑器(如sublime text或Komodo)只需单击按钮或命令即可轻松地重新缩进代码

以下是foreach循环的外观:

foreach ( $state as $state ) {
    update_post_meta($post_id,\'state\',$state->name);
}

edit

我还注意到了另一个错误,我以前真的应该注意到这个错误

$state = get_terms(\'state\', \'name\');
foreach ( $state as $state ) {
    update_post_meta($post_id,\'state\',$state->name);
}
请注意,您每次都在使用state?它们不应该是一样的。相反,请执行以下操作:

$states = get_terms(\'state\', \'name\');
foreach ( $states as $state ) {
    update_post_meta($post_id,\'state\',$state->name);
}
foreach州S as状态

此外,您实际上并没有检查状态是否是您选择的状态,因此类似这样:

$states = get_the_terms(\'state\', \'name\');
if ( $states && ! is_wp_error( $states ) ){
    foreach ( $states as $state ) {
        if($state->name == $_POST[\'yourinputsnamehere\']){
            update_post_meta($post_id,\'state\',$state->name);
            break;
        }
}
}

相关推荐