Como crio um relacionamento entre dois tipos de postagem personalizados?


16

Quero criar um banco de dados de séries de TV usando o WordPress. Segui alguns tutoriais e tenho dois tipos de postagem personalizados: um para movies, um para e series. Eu segui este post para a estrutura .

Minha pergunta é: como posso fazer a relação entre os filmes e os tipos de postagem das séries?


Primeiro de tudo, você NÃO está criando um banco de dados inteiro, apenas criando um tipo de postagem personalizada do WordPress. E no escopo do WordPress, você tem muitas oportunidades de categorizá-las, classificá-las etc. E todas elas são feitas com um bom relacionamento interno. Portanto, o relacionamento do que você está falando já existe, basta implementá-lo da maneira que você precisa. Portanto, sugiro que você implemente o post_type conforme as instruções e edite a pergunta com sua consulta real.
Mayeenul Islam

@MayeenulIslam, "implement the post_type as directed"o que você quer dizer?
precisa saber é o seguinte

Conforme indicado no encadeamento de link fornecido , ou usando um gerador simples como: este Post Type Generator .
Mayeenul Islam

@ MayeenulIslam: Não estou convencido de que "o relacionamento do que você está falando já está lá". Por padrão, não há relacionamento direto entre diferentes tipos de postagem.
s_ha_dum

@s_ha_dum Desculpe, eu perdi uma parte da pergunta dele, onde ele já disse que tinha dois post_types. É um erro meu. Estou tentando fazê-lo esclarecer com seus detalhes. Perdi que o detalhe já está lá. :( I está falando sobre a relação interna da taxonomia e pós personalizado tipo se definida.
Mayeenul Islam

Respostas:


22

Usando um plug-in

Alguns plugins muito bons para relacionamentos:

Usando uma Metabox

Você pode criar um relacionamento simples usando metaboxes:

add_action( 'admin_init', 'add_meta_boxes' );
function add_meta_boxes() {
    add_meta_box( 'some_metabox', 'Movies Relationship', 'movies_field', 'series' );
}

function movies_field() {
    global $post;
    $selected_movies = get_post_meta( $post->ID, '_movies', true );
    $all_movies = get_posts( array(
        'post_type' => 'movies',
        'numberposts' => -1,
        'orderby' => 'post_title',
        'order' => 'ASC'
    ) );
    ?>
    <input type="hidden" name="movies_nonce" value="<?php echo wp_create_nonce( basename( __FILE__ ) ); ?>" />
    <table class="form-table">
    <tr valign="top"><th scope="row">
    <label for="movies">Movies</label></th>
    <td><select multiple name="movies">
    <?php foreach ( $all_movies as $movie ) : ?>
        <option value="<?php echo $movie->ID; ?>"<?php echo (in_array( $movie->ID, $selected_movies )) ? ' selected="selected"' : ''; ?>><?php echo $movie->post_title; ?></option>
    <?php endforeach; ?>
    </select></td></tr>
    </table>
}

add_action( 'save_post', 'save_movie_field' );
function save_movie_field( $post_id ) {

    // only run this for series
    if ( 'series' != get_post_type( $post_id ) )
        return $post_id;        

    // verify nonce
    if ( empty( $_POST['movies_nonce'] ) || !wp_verify_nonce( $_POST['movies_nonce'], basename( __FILE__ ) ) )
        return $post_id;

    // check autosave
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
        return $post_id;

    // check permissions
    if ( !current_user_can( 'edit_post', $post_id ) )
        return $post_id;

    // save
    update_post_meta( $post_id, '_movies', array_map( 'intval', $_POST['movies'] ) );

}

E então, para obter o relacionamento dos filmes como uma lista de postagens em séries:

$series = new WP_Query( array(
    'post_type' => 'movies',
    'post__in' => get_post_meta( $series_id, '_movies', true ),
    'nopaging' => true
) );

if ( $series-> have_posts() ) { while ( $series->have_posts() ) {
    $series->the_post();
    ?>
    <li><a href="<?php the_permalink(); ?>"><?php the_title(); ></a></li>
    <?php
} }

3
Gosto da ideia com os metaboxes (tentando evitar plugins)!
precisa saber é o seguinte

Sem criar outra postagem, podemos adicionar a isso como criar um link permanente a partir dessa relação pai / filho? Por exemplo http://domain.com/series-name/movie-name:?
Xtremefaith

@ Xtremefaith isso pode ser feito com outro código. Há um plugin que eu criei para categorias. Talvez você possa usar como referência. wordpress.org/plugins/hierarchical-urls
vmassuchetto

5

Eu recomendo o plug-in Posts 2 Posts , que eu comecei a usar.

Ele permite que você crie muitos-para-muitos relações entre os postes e tipos de página, o que significa que você pode ligar moviesa series, e quaisquer outros CPTs você pode criar.

Este plug-in também permite criar metadados de conexão, o que permitirá obter mais detalhes ao criar suas conexões. É bastante flexível em seu uso, permitindo o controle sobre metaboxes administrativos, tipos de conexão e maneiras de exibir suas conexões no front-end. Por fim, está bem documentado .


Vou dar uma olhada nisso.
precisa saber é o seguinte

Eu estava procurando por sth. semelhante e tentou várias soluções. Devo dizer que este (Post 2 Post) foi perfeito, pode não ser o que um 'não programador' estaria procurando, mas se você está procurando mais por sth. como uma biblioteca para usar em seu modelo, isso é perfeito, bem documentado, bem integrado, entenda! ;)
Larzan

Eu fiz um plugin para as relações pós, mas wordpress.org/plugins/softmixt-relations
Softmixt

2

Infelizmente, o plug-in Postagens 2 Postagens foi descontinuado e não é mais mantido. Há um novo plugin alternativo para os Relacionamentos em MB . É inspirado no P2P e fornece uma API semelhante para criar relacionamentos entre postagens, termos e usuários.

O MB Relationships suporta relacionamentos bidirecionais por padrão e usa uma tabela personalizada para armazenar relacionamentos (como P2P) para um melhor desempenho (do que pós meta).

Vale a pena dar uma olhada no plugin.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.