使用自定义帖子类型作为自定义字段

时间:2013-05-03 作者:Sachin

我想为拥有所有店铺名称且正常工作的店铺创建一个自定义帖子类型。现在,我想在WordPress的每一篇新帖子中提取选择框中的所有店铺,然后选择的店铺名称将用作该帖子的自定义字段。我想将此店铺名称另存为中此帖子的元值wp_postmeta 桌子

每个自定义贴子都有post\\u type=\'store\',因此我如何编写一个函数来按存储类型获取所有贴子。

1 个回复
最合适的回答,由SO网友:fuxia 整理而成

要从帖子类型获取帖子,可以使用get_posts()

$posts = get_posts(
    array (
        \'numberposts\'    => -1,
        \'posts_per_page\' => -1,
        \'post_type\'      => \'store\'
    )
);
请注意-1 很危险:如果有数百万家商店,查询可能会超时。

下面是这样一个元框的一个非常基本的示例。您将在我们的标签中找到更多的示例和解释.

<?php # -*- coding: utf-8 -*-
/* Plugin Name: Store metabox */

add_action( \'add_meta_boxes_post\', \'wpse_98184_register_store_metabox\' );
add_action( \'save_post\', \'wpse_98184_save_store_metabox\' );

function wpse_98184_register_store_metabox()
{
    add_meta_box( \'post_store\', \'Store\', \'wpse_98184_render_store_metabox\', NULL, \'side\' );
}

function wpse_98184_render_store_metabox( $object, $box )
{
    $nonce = wp_create_nonce( __FILE__ );
    echo "<input type=\'hidden\' name=\'nonce_store_mbox\' value=\'$nonce\' />";

    $posts = get_posts(
        array (
            \'numberposts\'    => -1,
            \'posts_per_page\' => -1,
            \'post_type\'      => \'store\',
        )
    );

    if ( ! $posts )
        return print \'No store found\';

    $meta    = get_post_meta( $object->ID, \'_store\', TRUE );
    $selected = $meta ? $meta : 0;
    $html     = \'<select name="_store"><option value="0">Select a store</option>\';

    foreach ( $posts as $post )
        $html .= sprintf(
            \'<option value="%1$d" %2$s>%3$s</option>\',
            esc_attr( $post->ID ),
            selected( $post->ID, $selected, FALSE ),
            esc_html( $post->post_title )
            );

    $html .= \'</select>\';

    echo $html;
}

function wpse_98184_save_store_metabox( $id )
{
    if ( defined( \'DOING_AJAX\' ) && DOING_AJAX )
        return;

    if ( ! isset ( $_POST[ \'nonce_store_mbox\' ] ) )
        return;

    if ( ! wp_verify_nonce( $_POST[ \'nonce_store_mbox\' ], __FILE__ ) )
        return;

    if ( ! current_user_can( \'edit_post\', $id ) )
        return;

    if ( ! isset ( $_POST[\'_store\'] ) )
        return delete_post_meta( $id, \'_store\' );

    update_post_meta( $id, \'_store\', $_POST[\'_store\'] );
}
要在存储页面中列出所有这些关联的帖子,请使用查询帖子元字段的函数:

function wpse_98184_list_store_posts()
{
    $args = array(
        \'post_type\'  => \'post\',
        \'numberposts\'    => -1,
        \'posts_per_page\' => -1,
        \'meta_query\' => array (
            array (
                \'key\' => \'_store\',
                \'value\'   => get_the_ID(),
                \'compare\' => \'==\',
            ),
        )
    );

    $posts = get_posts( $args );

    if ( ! $posts )
        return \'\';

    $output = \'<ul class="store-posts">\';

    foreach ( $posts as $post )
        $output .= sprintf(
            \'<li><a href="%1$s">%2$s</a></li>\',
            get_permalink( $post->ID ),
            esc_html( get_the_title( $post->ID ) )
        );

    $output .= \'</ul>\';

    return $output;
}
您可以将此函数用作短代码处理程序:

add_shortcode( \'storeposts\', \'wpse_98184_list_store_posts\' );
然后只需添加[storeposts] 无论您在商店的什么地方需要该列表。

结束

相关推荐

将Metabox日期月份编号转换为单词

我使用带有日期(日、月和年)的自定义metabox。问题是,当我尝试将日期数字转换为日期字时,例如10是10月。我使用此代码:function eventposttype_get_the_month_abbr($month) { global $wp_locale; for ( $i = 1; $i < 13; $i = $i +1 ) { if ( $i == $month ) $monthabbr = $wp

使用自定义帖子类型作为自定义字段 - 小码农CODE - 行之有效找到问题解决它

使用自定义帖子类型作为自定义字段

时间:2013-05-03 作者:Sachin

我想为拥有所有店铺名称且正常工作的店铺创建一个自定义帖子类型。现在,我想在WordPress的每一篇新帖子中提取选择框中的所有店铺,然后选择的店铺名称将用作该帖子的自定义字段。我想将此店铺名称另存为中此帖子的元值wp_postmeta 桌子

每个自定义贴子都有post\\u type=\'store\',因此我如何编写一个函数来按存储类型获取所有贴子。

1 个回复
最合适的回答,由SO网友:fuxia 整理而成

要从帖子类型获取帖子,可以使用get_posts()

$posts = get_posts(
    array (
        \'numberposts\'    => -1,
        \'posts_per_page\' => -1,
        \'post_type\'      => \'store\'
    )
);
请注意-1 很危险:如果有数百万家商店,查询可能会超时。

下面是这样一个元框的一个非常基本的示例。您将在我们的标签中找到更多的示例和解释.

<?php # -*- coding: utf-8 -*-
/* Plugin Name: Store metabox */

add_action( \'add_meta_boxes_post\', \'wpse_98184_register_store_metabox\' );
add_action( \'save_post\', \'wpse_98184_save_store_metabox\' );

function wpse_98184_register_store_metabox()
{
    add_meta_box( \'post_store\', \'Store\', \'wpse_98184_render_store_metabox\', NULL, \'side\' );
}

function wpse_98184_render_store_metabox( $object, $box )
{
    $nonce = wp_create_nonce( __FILE__ );
    echo "<input type=\'hidden\' name=\'nonce_store_mbox\' value=\'$nonce\' />";

    $posts = get_posts(
        array (
            \'numberposts\'    => -1,
            \'posts_per_page\' => -1,
            \'post_type\'      => \'store\',
        )
    );

    if ( ! $posts )
        return print \'No store found\';

    $meta    = get_post_meta( $object->ID, \'_store\', TRUE );
    $selected = $meta ? $meta : 0;
    $html     = \'<select name="_store"><option value="0">Select a store</option>\';

    foreach ( $posts as $post )
        $html .= sprintf(
            \'<option value="%1$d" %2$s>%3$s</option>\',
            esc_attr( $post->ID ),
            selected( $post->ID, $selected, FALSE ),
            esc_html( $post->post_title )
            );

    $html .= \'</select>\';

    echo $html;
}

function wpse_98184_save_store_metabox( $id )
{
    if ( defined( \'DOING_AJAX\' ) && DOING_AJAX )
        return;

    if ( ! isset ( $_POST[ \'nonce_store_mbox\' ] ) )
        return;

    if ( ! wp_verify_nonce( $_POST[ \'nonce_store_mbox\' ], __FILE__ ) )
        return;

    if ( ! current_user_can( \'edit_post\', $id ) )
        return;

    if ( ! isset ( $_POST[\'_store\'] ) )
        return delete_post_meta( $id, \'_store\' );

    update_post_meta( $id, \'_store\', $_POST[\'_store\'] );
}
要在存储页面中列出所有这些关联的帖子,请使用查询帖子元字段的函数:

function wpse_98184_list_store_posts()
{
    $args = array(
        \'post_type\'  => \'post\',
        \'numberposts\'    => -1,
        \'posts_per_page\' => -1,
        \'meta_query\' => array (
            array (
                \'key\' => \'_store\',
                \'value\'   => get_the_ID(),
                \'compare\' => \'==\',
            ),
        )
    );

    $posts = get_posts( $args );

    if ( ! $posts )
        return \'\';

    $output = \'<ul class="store-posts">\';

    foreach ( $posts as $post )
        $output .= sprintf(
            \'<li><a href="%1$s">%2$s</a></li>\',
            get_permalink( $post->ID ),
            esc_html( get_the_title( $post->ID ) )
        );

    $output .= \'</ul>\';

    return $output;
}
您可以将此函数用作短代码处理程序:

add_shortcode( \'storeposts\', \'wpse_98184_list_store_posts\' );
然后只需添加[storeposts] 无论您在商店的什么地方需要该列表。

相关推荐

仅为主页显示Metabox

我将尝试使用设置字段将metabox添加到主页,但出现问题,请帮助我。删除时,metabox不会显示在页面编辑器中if statement 它显示在所有页面上。add_action(\'add_meta_boxes\', \'metabox_homepage_videos\'); function metabox_homepage_videos($post) { if (is_front_page()): add_meta_box(\'metabox