✅ WEB- ja WordPress -uutiset, -teemat, -laajennukset. Täällä jaamme vinkkejä ja parhaita verkkosivustoratkaisuja.

Lisää mukautettu linkki Kaikki viestit -näyttöön viestin metatietojen perusteella

17

TL;DR: Tässä artikkelissa kuvataan koodi, joka tarvitaan mukautetun linkin lisäämiseen Kaikki viestit -näytölle, joka käyttää mukautettua tekstin metatietoa.

Huomautus: Muutama kuukausi sitten kirjoitin artikkelin mukautetun näkymän lisäämisestä Kaikki viestit -näyttöön. Tämä artikkeli ei ole kaikki yhdessä sama, mutta eivät kaikki yhdessä erilaisia. Ajattele sitä yksityiskohtaisempana ja kenties konseptin käytännön toteutuksena.


Oletetaan, että sinulla on vakioviestityyppi tai mukautettu viestityyppi ja aiot yksinkertaisesti suodattaa otsikon perusteella, jonka määrität käyttämällä mekanismia, jonka avulla voit tallentaa tietoja post_metadatataulukkoon.

Oletetaan esimerkiksi, että sinulla on viesti ja se metatietona, jossa on:

  • a meta_keyarvollaarticle_attribute
  • a meta_valuearvollaheadline

Ja haluat käyttää näitä tietoja lisätäksesi uuden Otsikot – linkin, joka suodattaa automaattisesti kaiken paitsi artikkelit, joissa on kyseisiä metatietoja.

Näin se tehdään.

Mukautettu linkki Kaikki viestit -näytössä

Ennen kuin aloitat, on syytä huomata, että ongelman ratkaisemiseksi on kaksi tapaa:

  • Voisimme lisätä linkin ensin Kaikki viestit -sivun yläosaan ja sitten lisätä tietojen suodatustoiminnon,
  • Tai voimme tehdä sen toisin päin, jolloin lisäämme ensin taustalogiikan ja lisäämme sitten Kaikki viestit -sivun linkin.

Päätän aloittaa toisesta vaihtoehdosta. Ei ole mitään syytä, miksi se pitäisi tehdä tällä tavalla. Se on minun suosikkini.


Ensin minun on tartuttava [pre_get_posts](https://developer.wordpress.org/reference/hooks/pre_get_posts/)WordPressin tarjoamaan koukkuun. En aio käyttää tässä esimerkissä mitään nimiavaroituja luokkia tai etuliitteitä (koska olen käsitellyt tätä sisältöä riittävästi tällä sivustolla), mutta minulla on tämän esittelylaajennus linkitettynä viestin alareunaan.

Joka tapauksessa aloitan lisäämällä nimettömän toiminnon, joka on liitetty edellä mainittuun koukkuun:

add_action(
  'pre_get_posts',
  function (WP_Query $query) {

  }
);

Huomaa, että anonyymi funktio hyväksyy yhden argumentin, joka on viittaus WP_Querysivulla käynnissä olevaan nykyiseen esiintymään. Jos et ole perehtynyt kyseiseen luokkaan, suosittelen lukemaan jonkin näistä artikkeleista tai Kehittäjäresurssit – sivun.

Funktiossa minun on tarkistettava a:n läsnäolo meta_valuekyselymerkkijonossa. Tämä on helppo tehdä [filter_input](https://www.php.net/manual/en/function.filter-input.php)PHP:n tarjoaman toiminnon ansiosta.

add_action(
  'pre_get_posts',
  function (WP_Query $query) {
    $meta_value = 'headline';

    if (filter_input( INPUT_GET, 'meta_value') === $meta_value) {
      $query->set( 'meta_key', 'article_attribute' );
      $query->set( 'meta_value', $meta_value );
    }
  }
);

Tämä koukku tarkistaa, onko headlinearvo meta_valuekyselymerkkijonon avaimen avain. Jos näin on, se lisää sitten ilmentymään ja, meta_keyjoka kehottaa WordPressiä hakemaan kaikki viestit vain kyseisillä metatiedoilla.meta_value``WP_Query


Sen jälkeen minun on lisättävä linkki Kaikki viestit -sivun yläosaan käynnistääkseni tämän toiminnon. Tätä varten käytän [views_edit-posts](https://tommcfarlin.com/add-a-custom-view/)koukkua. Tämä toiminto hyväksyy joukon ankkureita, jotka näkyvät sivun yläosassa.

Viittaan näihin $viewsniin, että toiminto hyväksyy sen, kun poistan sen:

add_action(
  'views_edit-post',
  function (array $views) {

    return $views;
  }
);

Huomaa, että on tärkeää palauttaa taulukko takaisin WordPressiin, jotta se tietää mitä hahmontaa, vaikka muutoksia ei tehdä.

Ensin minun on määritettävä, olenko tällä hetkellä mukautetulla sivulla. Jos näin on, minun on lisättävä oikeat attribuutit sivun yläosaan lisättyyn ankkuriin:


$attributes = 'class=""';
if (filter_input(INPUT_GET, 'meta_value') === 'headline') {
  $attributes ='class="current aria-current="page"';
}

Sen jälkeen minun on lisättävä sivulle Otsikot -näkymä. Tämä edellyttää useiden toimintojen käyttöä:

  • [array_push](https://www.php.net/manual/en/function.array-push.php)uuden linkin lisäämiseksi luetteloon$views
  • [sprintf](https://www.php.net/manual/en/function.sprintf.php)uuden merkkijonon turvalliseen lisäämiseen
  • [add_query_arg](https://developer.wordpress.org/reference/functions/add_query_arg/)lisätäksesi joukon mukautettuja kyselyargumentteja nykyiselle sivulle.

Seuraava koodin osa näyttää tältä:


array_push(
  $views,
  sprintf(
    '<a href="%1$s" %2$s>%3$s 
      <span class="count">(%4$s)</span>
     </a>
    ',
    add_query_arg([
      'post_type'   => 'post',
      'post_status' => 'all',
      'meta_value'  => 'headline',
    ], 'edit.php'),
    $attributes
    __('Headlines'),
    count(  );
);

Mutta en ole vielä valmis. Huomaa erityisesti, että soitan [count](https://www.php.net/manual/en/function.count.php)toiminnon lopussa. Tämä on, jotta voin näyttää oikein tämän määritteen sisältävien viestien määrän.

Kirjoitan tähän kaksi apufunktiota ja palaan sitten takaisin sizeofpuheluun.


Tässä on aputoiminto, jonka avulla voit löytää tulosten määrän, joilla on määritetty meta_keyja meta_valuejoka meillä on tämän tyyppisille viesteille. Huomaa, että käytän [$wpdb](https://developer.wordpress.org/reference/classes/wpdb/)suoraa tietokantapuhelua ja käytän sitä erityisesti [prepare](https://developer.wordpress.org/reference%2Fclasses%2Fwpdb%2Fprepare%2F/)varmistaakseni, että teen sen turvallisesti.

function get_headline_results(): array {
  global $wpdb;
  return $wpdb->get_results( 
    $wpdb->prepare(
      "
      SELECT post_id FROM $wpdb->postmeta
      WHERE meta_key = %s AND meta_value = %s
      ",
      'article_attribute',
      'headline'
    ),
    ARRAY_A
  );
}

Huomaa, että se palauttaa kaikki tulokset (ei vain numeroa), koska tämä arvo välitetään hetkellisesti toiseen funktioon.

Tässä vaiheessa voisimme pysähtyä ja yksinkertaisesti katsoa kyselystä palautettua sisältöä, mutta jos olemme huolissamme vain viestityypistä post, meidän on otettava se huomioon. Tässä on yksi tapa tehdä se:

function filter_posts_from_pages( array $results ): array {
  $post_ids = array();

  foreach ($results as $result) {
    if ('post' === get_post_type( $result['post_type'])) {
      $post_ids[] = $result['post_id'];
    }
  }

  return $post_ids;
}

Sen avulla voimme palauttaa tämän arvon takaisin countyllä olevaan funktioon.


Edellä aloittamamme lohkon lopullisen version pitäisi näyttää tältä:


array_push(
  $views,
  sprintf(
    '<a href="%1$s" %2$s>%3$s <span class="count">(%4$s)</span></a>',
    add_query_arg(
      array(
        'post_type'   => 'post',
        'post_status' => 'all',
        'meta_value'  => 'headlines', 
      ),
      'edit.php'
    ),
    $attributes,
    __( 'Headlines' ),
    count(
      filter_posts_from_pages( get_headline_results()) )) );

Tämä tarkoittaa, että uuden otsikon lisäämistoiminnon täydellinen versio näyttää suunnilleen tältä:

add_action(
  'views_edit-post',
  function (array $views) {

    $attributes = 'class=""';
    if (filter_input( INPUT_GET, 'meta_value') === 'headline') {
      $attributes = 'class="current aria-current="page"';
    }

    array_push(
      $views,
      sprintf(
        '<a href="%1$s" %2$s>%3$s <span class="count">(%4$s)</span></a>',
        add_query_arg(
          array(
            'post_type'   => 'post',
            'post_status' => 'all',
            'meta_value'  => 'headline', 
          ),
          'edit.php'
        ),
        $attributes,
        __( 'Headlines' ),
        count(
          filter_posts_from_pages( get_headline_results()) )) );

    return $views;
  }
);

Ja kuten alusta alkaen mainittiin, tämä laajennus ei ole nimiavaroitunut tai järjestetty tavalla, jolla kirjoitan normaalisti koodia. Sen sijaan se on tarkoitettu osoittamaan tapa saavuttaa jotain nopeasti – eräänlainen prototyyppi.

Joten jos olet kiinnostunut näkemään jotain tällaista toiminnassa, voit tutustua GitHubin arkistoon. Huomaa, että se on tällä hetkellä kehityshaara . Muista tarkastella, [README](https://github.com/tommcfarlin/custom-metadata-filter/blob/develop/README.md)koska se antaa ohjeet tietojen lisäämiseen viestien tietokantaan, jotta Otsikot – ankkuri todella toimii sen sijaan, että se näyttäisi ehdoitta nolla-arvoa.

Tämä verkkosivusto käyttää evästeitä parantaakseen käyttökokemustasi. Oletamme, että olet kunnossa, mutta voit halutessasi kieltäytyä. Hyväksyä Lisätietoja