2017-02-13 4 views
0

Was ich versuche, ist eine benutzerdefinierte Beitragstyp durch den Anfangsbuchstaben des Titels zu listen. Ich habe ein paar Codebeispiele ausprobiert, aber ich glaube nicht, dass es so funktioniert, wie ich es möchte. Hier ist ein Teil des Codes, den ich vergeblich versucht und manipuliert habe.benutzerdefinierte Abfrage von benutzerdefinierten Beitragstyp von Initial leter

<div class="col-md-6"><!-- #### COLUMN #### --> 

       <!-- ############################################## --> 
       <!-- ############### PAGE TITLE T ################# --> 
       <!-- ############################################## --> 

       <p class="f_header">PAGE TITLE T</p> 

       <?php 

       $args = array(

        'post_type'    => 'movies', 
        'ignore_sticky_posts' => TRUE, 
        'substring_where'  => 'T', 

        ); 

        function restrict_by_first_letter($where, $qry) { 
         global $wpdb; 
         $sub = $qry->get('substring_where'); 
         if (!empty($sub)) { 
         $where .= $wpdb->prepare(
          " AND SUBSTRING({$wpdb->movies}.movies_title, 1, 1) = %s ", 
          $sub 
         ); 
         } 
         return $where; 
        } 
        add_filter('movies_where' , 'restrict_by_first_letter', 1 , 2); 

        $results = new WP_Query($args); 

       ?> 

       <table width="100%"><!-- #### TABLE #### --> 

        <?php 

         var_dump($results->request); 

         var_dump(wp_list_pluck($results->movies,'movies_title')); 

        ?> 

        <tr style="border-bottom: thin solid #111;"> 

         <td class="movie_genre">  

          <a href="<?php the_permalink() ?>"><?php the_title(); ?></a> 

         </td> 

        </tr> 

       </table><!-- ####/TABLE #### --> 

       <?php wp_reset_postdata(); ?> 

      </div><!-- ####/COLUMN #### --> 

Antwort

0

Es sieht für mich wie Sie den posts_where Filter anstelle der movies_where verwenden sollten, die Sie angeben. Es sieht auch so aus, als würden Sie nach Datenbankdaten rufen, die nicht existieren. Sie müssen post_title in der Tabelle $wpdb->posts aufrufen.

Ich würde versuchen, Ihren Code wie folgt zu aktualisieren:

function restrict_by_first_letter($where, $qry) { 
    global $wpdb; 
    $sub = $qry->get('substring_where'); 
    if (!empty($sub)) { 
     $where .= $wpdb->prepare(
     " AND SUBSTRING({$wpdb->posts}.post_title, 1, 1) = %s ", $sub 
     ); 
    } 
    return $where; 
} 
add_filter('posts_where' , 'restrict_by_first_letter', 1 , 2); 

Ich würde auch diesen Code bewegen (der Teil des Codes ich in diese Antwort kopiert) zu functions.php.

+0

Vielen Dank für Ihre Eingabe, aber ich habe getan, was Sie sagten, und ich habe dieses Ergebnis..string (264) "SELECT SQL_CALC_FOUND_ROWS wp_posts.ID VON wp_posts WHERE 1 = 1 und wp_posts.post_type = 'Filme' AND (wp_posts.post_status = 'publish' ODER wp_posts.post_status = 'private') UND SUBSTRING (.movies_title, 1, 1) = 'T' ORDER BY wp_posts.post_date DESC LIMIT 0, 10 "Feld (0) {} title-t – scottiescotsman

+0

I aktualisierte meine Antwort. Es sieht auch so aus, als ob Sie einige Datenbankdaten aufgerufen haben, die nicht existieren. – mbacon40

+0

ok Ich habe meinen Code aktualisiert und jetzt habe ich es bekommen, um den Titel als Hyperlink zu echo, aber es ist nur das Wort Array wider, aber der Hyperlink funktioniert: posts,'posts_title'); ?> scottiescotsman

Verwandte Themen